我有一个JavaScript数组数组:
[[-786, 2], [-783, 1], [-782, 5], [-781, 1], [-779, 2], [-778, 1], [-775, 1], [-774, 1], [-773, 1], [-771, 2], [-769, 1], [-767, 1], [-766, 1], [-763, 2], [-760, 2]]
如何根据子数组中第二个元素的值获得最大元素?
如果是上面我想得到元素:
[-782, 5]
因为5是所有子阵列中最大的第二个值。 如果有多个具有较大第二个值的子数组,我想先获得第一个。
马里乌什
答案 0 :(得分:4)
根据数组中每个元素的第二个元素执行降序排序。
var array = [[-786, 2], [-783, 1], [-782, 5], [-781, 1], [-779, 2], [-778, 1], [-775, 1], [-774, 1], [-773, 1], [-771, 2], [-769, 1], [-767, 1], [-766, 1], [-763, 2], [-760, 2]];
array.sort(function(a, b) {
return b[1] - a[1];
});
console.log(array[0]);
答案 1 :(得分:1)
var array = [[-786, 2], [-783, 1], [-782, 5], [-781, 1], [-779, 2], [-778, 1], [-775, 1], [-774, 1], [-773, 1], [-771, 2], [-769, 1], [-767, 1], [-766, 1], [-763, 2], [-760, 2]];
var maxElementIndex = 0;
for (var i = 0; i < array.length; i++) {
if (array[i][1] > array[maxElementIndex][1]) {
maxElementIndex = i;
}
}
console.log(array[maxElementIndex]);
答案 2 :(得分:1)
由于它被标记为d3,因此您也可以使用d3.greatest()
模块d3-array中的v2.3.0(重点是我):
根据指定的比较器或 访问器 返回指定的可迭代的最大元素。
通过提供从每个元素的数组d3.greatest()
返回第二个元素的访问器函数,将返回与所有第二个元素相比具有最大值的元素。
const data = [[-786, 2], [-783, 1], [-782, 5], [-781, 1], [-779, 2], [-778, 1], [-775, 1], [-774, 1], [-773, 1], [-771, 2], [-769, 1], [-767, 1], [-766, 1], [-763, 2], [-760, 2]];
const greatest= d3.greatest(data, d => d[1]);
console.log(greatest);
<script src="https://cdn.jsdelivr.net/npm/d3-array@2.4.0/dist/d3-array.min.js"></script>
但是请注意,在编写d3.greatest()
时,它还不是D3 v5 主捆绑包的一部分,因此您要使用d3数组模块。不过,它应该包含在即将发布的 v6 中。
答案 3 :(得分:0)
var target = [[-786, 2], [-783, 1], [-782, 5], [-781, 1], [-779, 2], [-778, 1], [-775, 1], [-774, 1], [-773, 1], [-771, 2], [-769, 1], [-767, 1], [-766, 1], [-763, 2], [-760, 2]]
var max = 0, tmp = 0;
var max_entry, tmp_entry;
while (target.length > 0){
tmp_entry = target.pop();
tmp = tmp_entry[1];
if (tmp > max){
max = tmp;
max_entry = tmp_entry;
}
}
alert(max_entry);