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

Posted

技术标签:

【中文标题】如何根据他的第二个子数组值获取最大的数组元素【英文标题】:How to get biggest array element based on his second sub array value 【发布时间】:2013-08-24 18:29:12 【问题描述】:

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

马吕斯

【问题讨论】:

你检查过这个答案吗? ***.com/questions/5052673/… 【参考方案1】:

由于这是标记为d3,您还可以使用d3-array 模块v2.3.0 中的d3.greatest()(强调我的):

根据指定的比较器存取器返回指定iterable的最大元素。

通过提供一个从每个元素的数组中返回第二个元素的访问器函数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 中。

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

在面试中你不会被允许使用sort,同样强烈不建议使用sort,因为它非常慢。【参考方案3】:
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);

【讨论】:

【参考方案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]];
var maxElementIndex = 0;
for (var i = 0; i < array.length; i++) 
    if (array[i][1] > array[maxElementIndex][1]) 
        maxElementIndex = i;
    


console.log(array[maxElementIndex]);

【讨论】:

以上是关于如何根据他的第二个子数组值获取最大的数组元素的主要内容,如果未能解决你的问题,请参考以下文章

shell   找出数组元素中的最大值

求数组中第K个最大的值

求一个整数数组中最大子数组的和

返回一个整数数组中最大子数组的和。

数组中的第K个最大元素

如何获取数组中指定个数的几个最大值