如何在JavaScript中返回二维数组中含最大值(索引1)的元素?
如何从二维数组中返回包含最大值的元素?
给定如下二维数组,需要返回包含最大值的元素:
let ar = [["finalOrderData",1],["finalFabricData",3],["finalDecorationData",3],["finalHtData",3]]
预期结果
["finalFabricData",3]
我尝试了以下函数,但它仅返回数值本身:
function getMaxOf2DIndex(arr, idx) { return Math.max.apply(null, arr.map(function (e) { return e[idx] })) }
解决方案
你的函数只能获取到最大值的数值,要返回对应的完整元素,需要结合最大值查找和元素匹配逻辑,以下是两种实用的实现方式:
方法一:分步实现(逻辑清晰)
先获取指定索引的最大值,再遍历数组找到第一个包含该最大值的元素:
function getMaxElement(arr, idx) { // 提取指定索引的所有值并获取最大值 const maxValue = Math.max(...arr.map(e => e[idx])); // 找到第一个匹配最大值的元素 return arr.find(e => e[idx] === maxValue); } // 调用示例 let ar = [["finalOrderData",1],["finalFabricData",3],["finalDecorationData",3],["finalHtData",3]]; console.log(getMaxElement(ar, 1)); // 输出 ["finalFabricData",3]
方法二:一次遍历完成(性能更优)
如果数组规模较大,一次遍历可以减少计算开销,同时记录最大值和对应的元素:
function getMaxElement(arr, idx) { let maxValue = -Infinity; let maxElement = null; for (const item of arr) { if (item[idx] > maxValue) { maxValue = item[idx]; maxElement = item; } } return maxElement; } // 调用示例 let ar = [["finalOrderData",1],["finalFabricData",3],["finalDecorationData",3],["finalHtData",3]]; console.log(getMaxElement(ar, 1)); // 输出 ["finalFabricData",3]
说明:以上两种方法都会返回第一个出现的最大值元素,与你的预期结果一致。如果需要返回所有包含最大值的元素,只需将
find替换为filter,或在遍历过程中收集所有符合条件的元素即可。
内容的提问来源于stack exchange,提问作者onit
相关产品推荐
相关产品推荐

