[英]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]);
}
}
}
结果并不如预期。
非常感谢任何帮助! 非常感谢!
使用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()对数组进行迭代并形成一个对象来保存最大值。 由于我们有多个a
、 b
(以及很多……),我们使用 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.