JavaScript中如何从数组a和b得到数组c?根据名称获取对应ID
根据名称数组获取对应ID数组的几种解法
嘿,这需求很典型,我给你分享两种在JavaScript里常用的实现思路,都能轻松从数组a和b得到目标数组c:
方法一:用filter() + map()组合实现
这种方法逻辑直观,适合数据量不大的场景:
const a = [{id:1, name:'a'}, {id:2, name:'b'}, {id:3, name:'c'}, {id:4, name:'d'}, {id:5, name:'e'}]; const b = ['a','d']; const c = a.filter(item => b.includes(item.name)).map(item => item.id); console.log(c); // 输出: [1, 4]
- 逻辑说明:
- 先用
filter()筛选出数组a中name存在于数组b的元素 - 再用
map()把筛选后的元素的id提取出来,组成最终的数组c
- 先用
方法二:先构建映射表,再快速查找(性能更优)
如果数组a的元素数量很多,推荐用这种方法,因为它的时间复杂度更低:
const a = [{id:1, name:'a'}, {id:2, name:'b'}, {id:3, name:'c'}, {id:4, name:'d'}, {id:5, name:'e'}]; const b = ['a','d']; // 第一步:构建name到id的映射对象 const nameIdMap = {}; a.forEach(item => { nameIdMap[item.name] = item.id; }); // 第二步:遍历b数组,直接从映射表中取对应的id const c = b.map(name => nameIdMap[name]); console.log(c); // 输出: [1, 4]
- 逻辑说明:
- 先遍历一次数组
a,把每个元素的name作为键、id作为值存入对象,相当于建立一个快速查找的字典 - 之后遍历数组
b,直接通过键取值,避免了重复遍历数组a,性能提升明显
- 先遍历一次数组
额外小提示
如果数组b中存在数组a里没有的名称,上面的方法会返回undefined,你可以根据需求处理这种情况,比如返回默认值:
// 不存在的名称返回null(或其他你需要的默认值) const c = b.map(name => nameIdMap[name] ?? null);
内容的提问来源于stack exchange,提问作者蒋建雨
相关产品推荐
相关产品推荐

