繁体   English   中英

获取数组javascript中的最大值

[英]Get max value in array javascript

我有以下数组:

var arr = [
    ["a","1"],
    ["b","3"],
    ["a","2"],
    ["b","5"]
]

我想提取上述数组中的最大值。

我想要的结果:

  [
      ["a","2"],
      ["b","5"]
  ]

更新:我尝试了以下代码:

var arr_res = [];
var number_max = 0;

for(let i = 0; i < arr.length; i++){
    if(arr_res.includes(arr[i][0]) == false){
        if(arr[i][1] > number_max){
            number_max = arr[i][1];
            arr_res.push([arr[i][0],number_max]);
        }
    }
}

结果并不如预期。

非常感谢任何帮助! 非常感谢!

这是您如何解决问题的基本路线图:

  • 创建一个变量来存储结果数组(例如var result = [];
  • 迭代数组的元素
  • 检查每个内部数组的第一个元素
    • 如果它的第一个元素(字母)在result中没有记录,则添加它
    • 否则,检查第二个内部数组元素(数字)
      • 如果结果数组中存储的数字小于当前记录的编号,则将其替换为当前记录的编号

对您有用的 JavaScript 命令是: forEach()find()push()

使用reduce和Math.max,基本上是单行

 const arr = [ ["a","1"], ["b","3"], ["a","2"], ["b","5"], ]; const res = [...arr.reduce((a, [k, v]) => a.set(k, Math.max(a.get(k) || Number.MIN_SAFE_INTEGER, Number(v))), new Map)]; console.log(res);

使用Array.prototype.reduce()对数组进行迭代并形成一个对象来保存最大值。 由于我们有多个ab (以及很多……),我们使用 Object 使键唯一。 在每次迭代中检查键 ( a, b, .... ) 是否存在于old (所有先前的迭代值)中。 如果存在,则将当前值与现有值进行比较,并在必要时进行替换,将当前迭代值添加到old else 中。

最后使用Object.entries()将对象转换为数组。

例子:

 const arr = [["292", "3"], ["277", "7"], ["280", "8"], ["281", "9"], ["277", "2"], ["280", "1"], ["281", "2"], ["292", "5"]]; const res = Object.entries(arr.reduce((old, cur) => { typeof old[cur[0]] === 'undefined' && (old[cur[0]] = +cur[1]) if (Number(cur[1]) > old[cur[0]]) { old[cur[0]] = +cur[1] } return old }, {})) console.log(res)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM