You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:56:01