如何按filterArray指定顺序过滤mainArray并返回对应结果?
按指定ID顺序过滤数组对象的解决方案
你的问题出在当前代码是按mainArray的原有顺序遍历并筛选匹配项,所以得到的结果顺序是[1,3,9],而非filterArray指定的[3,9,1]。要实现按filterArray的ID顺序输出,应该反过来以filterArray为遍历主体,从mainArray中找到对应项。
优化后的代码实现
const mainArray = [ { id: 1, name: 'AC Milan' }, { id: 2, name: 'Juventus' }, { id: 3, name: 'AS Roma' }, { id: 4, name: "Napoli"}, { id: 9, name: "Inter Milan"} ]; const filterArray = [ { id: 3 }, { id: 9 }, { id: 1 } ]; // 先构建id到对象的映射,提升查找效率 const mainMap = new Map(mainArray.map(item => [item.id, item])); // 按filterArray的顺序提取对应项 const filteredArray = filterArray.map(filterItem => mainMap.get(filterItem.id)); // 修复循环条件(原代码n<=length会导致越界) for(let n = 0; n < filteredArray.length; n++){ document.write(`${filteredArray[n].id} - ${filteredArray[n].name}<br/>`); };
代码说明
- 映射表构建:使用
Map将mainArray的id和对应对象关联,后续查找时间复杂度为O(1),比每次用some遍历更高效。 - 按顺序筛选:遍历
filterArray,依次从映射表中取出对应对象,确保结果顺序与filterArray的ID顺序一致。 - 循环修复:原代码的
n<=filteredArray.length会导致数组越界(因为数组索引从0开始,最大索引是length-1),改为n < filteredArray.length即可避免错误。
内容的提问来源于stack exchange,提问作者Powl_London
相关产品推荐
相关产品推荐

