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

JavaScript中获取多维数组对象匹配元素索引的最优方法

F1赛事数据查询问题解决

需求说明

我正在为一级方程式(Formula One)赛事创建赛季积分表,数据采用多维数组结构:每个赛季是一个数组,赛事对应其中的对象,每个对象存储参赛车手的车号(driver数组)和发车格号(grid数组)。

需要实现的功能是:找出所有参加第4场比赛的车手对应的driver索引和grid数组索引,返回格式为二维数组,例如[[3,1],[6,2]],代表f1[0][0].race[0].driver[3][1] = 4且f1[0][0].race[0].driver[6][2] = 4。

尝试过用reduce方法,但在f1[0][0]这类多维结构中无法正确使用;知道用for循环能实现,但数据量增大后效率偏低。

相关代码

f1 = [];
f1[0] = [];
f1[0][0] = {};
f1[0][0].race           = [];
f1[0][0].race[0]        = {};

for(n=0; n<=10; n++){
    f1[0][0].race[0].driver[n]  = [];
    f1[0][0].race[0].grid[n]    = [];
};

f1[0][0].race[0].driver[3]  = [2,4,6,8,10];
f1[0][0].race[0].grid[3]    = [4,9,3,2,7];

f1[0][0].race[0].driver[6]  = [1,3,4,6];
f1[0][0].race[0].grid[6]    = [3,7,2,1];

f1[0][0].race[0].driver[8]  = [2,3,8];
f1[0][0].race[0].grid[8]    = [5,4,1];

解决方案

可以结合Object.entries和flatMap来高效处理,既避免嵌套循环的冗余,又能清晰遍历多维结构:

const targetRaceNumber = 4;
const raceData = f1[0][0].race[0];

const result = Object.entries(raceData.driver)
  .flatMap(([driverIndex, races]) => {
    // 筛选当前车手参加第4场比赛的索引
    return races.map((num, gridIndex) => num === targetRaceNumber ? [parseInt(driverIndex), gridIndex] : null)
      .filter(item => item !== null);
  });

console.log(result); // 输出 [[3,1],[6,2]]

代码说明

  • Object.entries(raceData.driver):将driver对象转换为键值对数组,键为车手索引(字符串类型),值为该车手参加的赛事编号数组
  • flatMap:遍历每个车手数据,同时将子数组扁平化,避免返回嵌套数组结构
  • 内层map+filter:筛选出赛事编号等于目标值的条目,转换为[车手索引, grid数组索引]格式,过滤掉不符合条件的null值

这种方法比纯for循环更简洁,且大数据量下性能更优,因为它利用了JS引擎对数组方法的优化实现。

内容的提问来源于stack exchange,提问作者S.S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:42:21