繁体   English   中英

获取二维数组中的最高元素

[英]get highest element in a two dimensional array

我有这个数组:

const myArray = [["Cow", 3], ["Pig", 5], ["Pig", 10], ["Pig", 4], ["Chicken", 1], ["Cow", 1], ["Cow" , 12], ["Cow", 11], ["Chicken", 12]]

并想变成这样:(只有最高的一个)

[ [ 'Pig', 10 ], [ 'Cow', 12 ], [ 'Chicken', 12 ] ]

但是用我的代码我不能得到最后一个,我找不到为什么

const myArray = [["Cow", 3], ["Pig", 5], ["Pig", 10], ["Pig", 4], ["Chicken", 1], ["Cow", 1], ["Cow" , 12], ["Cow", 11], ["Chicken", 12]]

function getHighest() {

  var onlyHighest = [];

  myArray.sort(
    function(a,b) {
      if (a[0] == b[0])
       return a[1] < b[1] ? -1 : 1;
      return a[0] < b[0] ? 1 : -1;
    }
  );  

  myArray.forEach((a, i) => {
    var i = i+1;
    if (i < myArray.length) {
      if (a[0] != myArray[i][0]){
        onlyHighest.push([a[0], a[1]]);
      }
    }
  });

  return console.log(onlyHighest)
  //    [ [ 'Pig', 10 ], [ 'Cow', 12 ] ]
}

使用一个对象来保存每只动物的当前最高值。 循环遍历数组,当它高于对象中的值时替换该值。

 const myArray = [["Cow", 3], ["Pig", 5], ["Pig", 10], ["Pig", 4], ["Chicken", 1], ["Cow", 1], ["Cow" , 12], ["Cow", 11], ["Chicken", 12]] function getHighest(array) { let obj = {}; array.forEach(([key, value]) => { if (key in obj) { if (value > obj[key]) { obj[key] = value; } } else { obj[key] = value; } }); return Object.entries(obj); } console.log(getHighest(myArray));

您的

myArray.forEach((a, i) => {
  var i = i+1;
  if (i < myArray.length) {

导致问题并且非常混乱。 如果数组的最后一个排序块仅包含 2 个元素,则不会满足该条件,因此该块中的任何内容都不会被推送。

如果原始元素是数组中的最后一个元素,则快速解决方法是无条件推送原始元素。

myArray.forEach((a, i) => {
  if (i === myArray.length - 1) {

更好的重构是将输入分组到一个对象中,该对象为每个属性保留最大值,不涉及排序。

 const myArray = [["Cow", 3], ["Pig", 5], ["Pig", 10], ["Pig", 4], ["Chicken", 1], ["Cow", 1], ["Cow" , 12], ["Cow", 11], ["Chicken", 12]] const grouped = {}; for (const [prop, num] of myArray) { grouped[prop] = Math.max(num, grouped[prop] ?? -Infinity); } const onlyHighest = Object.entries(grouped); console.log(onlyHighest);

一个简单的排序怎么样

function funk() {
  let a = [["Cow", 3], ["Pig", 5], ["Pig", 10], ["Pig", 4], ["Chicken", 1], ["Cow", 1], ["Cow", 12], ["Cow", 11], ["Chicken", 12]];
  let r = a.sort((a, b) => {
    return b[1] - a[1]
  })[0];
  Logger.log(r);
}

Execution log
12:37:11 PM Notice  Execution started
12:37:11 PM Info    [Cow, 12.0]
12:37:12 PM Notice  Execution completed

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM