如何查找arrayOne中id与arrayTwo匹配的元素对应的索引值
解法思路
- 提取arrayTwo中所有的id存入Set结构,降低后续匹配的查找时间复杂度
- 遍历arrayOne,判断当前元素的
revision.id是否存在于提前构建的id集合中,存在则收集当前索引
代码实现
const arrayOne = [{revision: { id: 1 }}, {revision: { id: 2 }}, {revision: { id: 3 }}, {revision: { id: 4 }}]; const arrayTwo = [{someOtherProp: { id: 2 }}, {someOtherProp: { id: 4 }}]; // 提取arrayTwo的所有id构建Set const targetIdSet = new Set(arrayTwo.map(item => item.someOtherProp.id)); // 遍历arrayOne收集符合条件的索引 const matchedIndexes = arrayOne.reduce((resultArr, currentItem, index) => { if (targetIdSet.has(currentItem.revision.id)) { resultArr.push(index); } return resultArr; }, []); console.log(matchedIndexes); // 输出结果:[1, 3]
补充说明
若数据量较小,也可以将提取的id存为普通数组,用
Array.prototype.includes方法判断匹配,写法更简单;数据量较大时Set的O(1)查找效率会比数组的O(n)查找有明显性能优势。
内容的提问来源于stack exchange,提问作者drifterOcean19
相关产品推荐
相关产品推荐

