【问题标题】:How to return the element of an array containing the max value (index 1) (Javascript)?如何返回包含最大值(索引 1)的数组元素(Javascript)?
【发布时间】:2022-11-16 12:51:21
【问题描述】:

给定下面的数组,我如何返回包含最大数量的元素?

let ar = [["finalOrderData",1],["finalFabricData",3],["finalDecorationData",3],["finalHtData",3]]

预期结果

let ar = ["finalFabricData",3]

这是我正在尝试的函数,但它只返回数字本身:

function getMaxOf2DIndex(arr, idx) {
  return Math.max.apply(null, arr.map(function (e) { return e[idx] }))
}

感谢任何帮助!

【问题讨论】:

  • 为什么它不返回带有3 的所有对象?如果对象的顺序不同怎么办 - 它仍然是您想要的索引 1 吗?
  • 我只需要获取第一个/最大的数据集及其名称。其他的将在稍后连接。感谢您的评论,@Andy!
  • 但您的预期结果是最后一个最大的数据集,而不是第一个......?
  • 这是一个数组数组。您要获取哪个索引 1?外层索引1是一个数组["finalFabricData",3],内层数组索引1是一个数字
  • 只是做了一些更正,以便清楚。抱歉……整天看着代码和学习……现在我眼前一亮。谢谢,@Andy

标签: javascript


【解决方案1】:

你可以使用Array.reduce函数

let ar = [["finalOrderData",1],["finalFabricData",3],["finalDecorationData",3],["finalHtData",3]]
let result = ar.reduce((acc,cur) => !acc || cur[1] > acc[1] ? cur : acc, undefined);
console.log(result);

【讨论】:

  • 谢谢!!!!!!
  • 好答案!我认为您可以使用 ar 中的第一项初始化 reduce,这样您就可以摆脱未定义的检查。
【解决方案2】:

使用Array.sort()

let ar = [['finalOrderData', 1], ['finalFabricData', 3], ['finalDecorationData', 3], ['finalHtData', 3]];

let res = ar.sort((a, b) => b[1] - a[1])[0];

console.log(res);

请注意,这不处理单词的字母顺序。

【讨论】:

  • 谢谢!!!!!!
  • 不错的答案,但空间复杂度不是最好的,因为 sort 将返回原始数组的排序副本。下面的 reduce 答案要好一些。
【解决方案3】:
function getMaxOf2DIndex(arr, idx) {
let maxItem = arr[0];

ar.forEach((item, i) => {
    if(item[idx] >= maxItem[idx])
        maxItem = item; 
});

return maxItem;

}

【讨论】:

  • 非常感谢,先生,欢迎!
【解决方案4】:

我认为最直接的方法:

let ar = [["finalOrderData",1],["finalFabricData",3],["finalDecorationData",3],["finalHtData",3]]

var maxNumber = ar[0]

ar.forEach((element) => maxNumber = element[1] > maxNumber[1] ? element : maxNumber)

或者写得更详细:

let ar = [["finalOrderData",1],["finalFabricData",3],["finalDecorationData",3],["finalHtData",3]]

var maxNumber = ar[0]

for (element of ar) {

  let number = element[1]

  if (number > maxNumber[1])
    maxNumber = number
  }

【讨论】:

  • 但是,如果您不知道最大数的第一个实例位于索引 1 处怎么办?
  • 不确定你的意思@Andy,该号码始终位于ar 中的索引 1。
  • 我看错了;我的回答不返回包含最大数的原始数组,只返回最大数。编辑:现在固定。
猜你喜欢
  • 2021-06-07
  • 2012-07-03
  • 2012-11-13
  • 1970-01-01
  • 2018-07-09
  • 2017-02-06
  • 2022-11-03
  • 1970-01-01
  • 2019-09-11
相关资源
最近更新 更多