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

马吕斯

【问题讨论】:

标签: javascript arrays d3.js


【解决方案1】:

由于这是标记为,您还可以使用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]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-21
        • 1970-01-01
        相关资源
        最近更新 更多