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

如何优化多维数组中指定位置最大值对应子数组首元素的获取逻辑?

优化多维数组找指定位置最大值对应子数组首元素的实现

你的需求是从多维数组里找到子数组指定索引(这里是索引1)数值最大的项,返回其首个元素。原代码能正常运行,但可以从遍历次数、内存占用两方面优化,下面给出几种更高效简洁的实现方式:

原代码回顾

slidesArray = [["1",500],["2",750],["3",501]];

var EmpArr = []
var x = 0;
var len = slidesArray.length;
for (x; x < len; x++) {
    EmpArr.push(Math.max(slidesArray[x][1]))
}

var largestResult = Math.max(...EmpArr);

var result = slidesArray.filter(function(v,i) {
    return v[1] === largestResult;
}); 

原代码需要遍历数组两次,还额外创建了EmpArr存储中间值,对于大数据量的数组,效率和内存利用都有优化空间。


方案1:单次遍历取首个最大值项(最优)

用Array.reduce()一次遍历完成,不需要额外数组,直接跟踪当前最大值对应的子数组:

const slidesArray = [["1",500],["2",750],["3",501]];

// 遍历过程中始终保留数值最大的子数组
const maxItem = slidesArray.reduce((prev, curr) => {
  return curr[1] > prev[1] ? curr : prev;
});

// 取子数组的首个元素
const result = maxItem[0];
console.log(result); // 输出 '2'

优势:仅遍历数组1次,无额外内存开销,时间复杂度O(n),是性能最优的方案。如果有多个子数组的索引1值同为最大值,这个方案会返回第一个遇到的项。


方案2:处理多个最大值项的场景

如果需要返回所有索引1值为最大值的子数组的首个元素,可以用一次遍历同时跟踪最大值和结果集合:

const slidesArray = [["1",750],["2",750],["3",501]];

const { results } = slidesArray.reduce((acc, item) => {
  if (item[1] > acc.maxValue) {
    // 遇到更大值,重置最大值和结果数组
    return {
      maxValue: item[1],
      results: [item[0]]
    };
  } else if (item[1] === acc.maxValue) {
    // 遇到等值,添加到结果数组
    acc.results.push(item[0]);
  }
  return acc;
}, { maxValue: -Infinity, results: [] });

console.log(results); // 输出 ['1', '2']

优势:同样只遍历1次,同时处理最大值和多结果的情况,避免了先找最大值再过滤的两次遍历操作。


方案3:简洁版(适合小数据量)

如果数组规模不大,追求代码简洁性,可以用map+Math.max+filter的组合,比原代码更简洁:

const slidesArray = [["1",500],["2",750],["3",501]];

// 先提取所有索引1的值,找到最大值
const maxVal = Math.max(...slidesArray.map(item => item[1]));
// 过滤出所有符合条件的子数组,再提取首元素
const results = slidesArray.filter(item => item[1] === maxVal).map(item => item[0]);

console.log(results); // 输出 ['2']

注意:这个方案还是需要遍历数组2次,适合数据量小的场景,胜在代码直观易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:38:34