如何根据他的第二个子数组值获得最大的数组元素

时间:2013-08-22 06:45:23

标签: javascript arrays d3.js

我有一个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 个答案:

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

jsFiddle Demo

答案 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.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);