Array Filter失效问题(附可运行代码片段)
问题分析与解决
你的代码没达到预期效果的核心原因是:filter方法不会修改原数组,它仅返回一个过滤后的新数组,你当前只是调用了filter但没有把返回结果重新赋值给elem.cars,所以原数组的cars属性完全没变化。
修正后的代码
要保留原有数据结构并删除id为48的车辆,只需将filter返回的新数组赋值回elem.cars即可:
const numbers = [49, 482, 49, 49, 49, 1135, 49, 1709, 1044, 1016, 30]; const array = [{ cars: [{ id: 48 }, { id: 49 }] }]; // 将filter的结果赋值回原cars属性,完成替换 array.forEach(elem => { elem.cars = elem.cars.filter(car => numbers.includes(car.id)); }); console.log(array);
性能优化建议
如果numbers数组很大,推荐把它转换成Set,因为Set.has()的查询效率是O(1),比数组的includes()(O(n))更高:
const numberSet = new Set(numbers); array.forEach(elem => { elem.cars = elem.cars.filter(car => numberSet.has(car.id)); });
内容的提问来源于stack exchange,提问作者Tiago Silva
相关产品推荐
相关产品推荐

