如何通过一个数组过滤另一个数组?JS数组过滤代码正确性咨询
问题解决方法
首先,你写的这段代码无法得到正确结果,问题出在firstArray.findIndex((obj)=> obj.id === o.id)这部分:firstArray是字符串数组,里面的元素是'10'、'12'这类字符串,并没有id属性,所以这个判断条件永远不成立,findIndex会一直返回-1,最终过滤后得到的是空数组。
正确实现方式
方法1:使用Array.includes()(简单直观)
直接在filter回调里判断当前对象的id是否存在于firstArray中:
const firstArray = ['10','12']; let secondArray = [{"id":"10", "name":"name 10"}, {"id":"11", "name":"name 11"}, {"id":"12", "name":"name 12"}]; secondArray = secondArray.filter(o => firstArray.includes(o.id)); console.log(secondArray);
运行后会输出你想要的结果:[{"id":"10","name":"name 10"},{"id":"12","name":"name 12"}]
方法2:使用Set优化查找性能(适合数据量大的场景)
如果firstArray元素很多,用Set的查找效率更高(时间复杂度O(1),数组includes是O(n)):
const firstArray = ['10','12']; const idSet = new Set(firstArray); let secondArray = [{"id":"10", "name":"name 10"}, {"id":"11", "name":"name 11"}, {"id":"12", "name":"name 12"}]; secondArray = secondArray.filter(o => idSet.has(o.id)); console.log(secondArray);
这个方法和方法1结果一致,但处理大量数据时性能更好。
内容的提问来源于stack exchange,提问作者Manik
相关产品推荐
相关产品推荐

