6

我有一个 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 是所有子数组中最大的第二个值。如果有多个具有较大第二个值的子数组,我想获得第一个。

马吕什

4

4 回答 4

3

根据数组每个元素的第二个元素执行降序排序。

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]);

jsFiddle 演示

for请注意,虽然此解决方案很简洁,但仅使用排序来查找最大或最小元素将比在单次迭代中找到最大/最小元素的循环慢得多。

于 2013-08-22T06:55:03.343 回答
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]);
于 2013-08-22T06:51:24.137 回答
1

由于这是标记为您也可以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-array 模块。不过,它应该包含在即将发布的v6中。

于 2020-06-05T07:44:37.320 回答
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);
于 2013-08-22T06:56:25.417 回答