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

根据联赛代码数组生成对应联赛场地对象索引的新数组

根据联赛代码数组生成对应联赛场地对象索引的新数组

嘿,这个需求用map就非常合适,完全不需要用push(),我给你理清楚怎么做:

首先,咱们可以先把league.venue里的每个元素的code和它对应的索引做一个映射表——这样后面查找的时候不用每次都遍历整个数组,效率更高。然后直接用map遍历你的league.code数组,把每个code转换成对应的索引就行。

给你看完整的可运行代码,直接就能得到你要的[4,5,0,3,2]:

// 你提供的原始数据
league  = {};
league.venue  = [];
league.venue[0] = {};
league.venue[0].code  = 1000;
league.venue[0].team  = "Arsenal";

league.venue[1] = {};
league.venue[1].code  = 1001;
league.venue[1].team  = "Spurs";

league.venue[2] = {};
league.venue[2].code  = 1002;
league.venue[2].team  = "Liverpool";

league.venue[3] = {};
league.venue[3].code  = 1003;
league.venue[3].team  = "Manchester City";

league.venue[4] = {};
league.venue[4].code  = 1004;
league.venue[4].team  = "Manchester United";

league.venue[5] = {};
league.venue[5].code  = 1005;
league.venue[5].team  = "Everton";

league.code = [1004, 1005, 1000, 1003, 1002];

// 解决方案部分
// 1. 先建立code到索引的映射表
const codeToIndex = league.venue.reduce((mapping, venueItem, index) => {
  mapping[venueItem.code] = index;
  return mapping;
}, {});

// 2. 用map遍历code数组,取出对应的索引
const result = league.code.map(code => codeToIndex[code]);

console.log(result); // 输出: [4,5,0,3,2]

为什么不用filter呢?因为filter的作用是从数组里筛选符合条件的元素,而咱们这里是要把每个code转换成对应的索引,是一对一的转换,map就是干这个的,完全匹配需求。

另外说一句,用reduce做映射表这一步很重要,如果你的league.venue数组很大,每次用findIndex去查找的话,时间复杂度会是O(n²),而用映射表+map的方式是O(n),效率会高很多。当然如果数组很小的话,其实直接用map+findIndex也能实现,比如:

const result = league.code.map(code => league.venue.findIndex(item => item.code === code));

这个写法更简洁,但如果venue数组元素多的话,性能不如前面的方法。你可以根据实际情况选~

备注:内容来源于stack exchange,提问作者Powl_London

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 12:08:06