如何在数组中找到最大值和先前的最大值

时间:2018-08-22 16:05:04

标签: arrays angular max

我有一个对象数组。我想找到最大值和之前的那个。

arr : [{key:1, value: 1},{key:2, value: 2}, {key:3, value: 3}, {key:4, value: 4}, {key:5, value: 5}]

    let largest = 0;
    greater = 0;
    val = [];
    this.arr.forEach(aa => {
      if (largest < Number(aa.value)) {
        largest = Number(aa.value);
        greater = aa.key;
      }
    });
  }

更大的值为5;我也想获取值4并将它们都推入val数组。

2 个答案:

答案 0 :(得分:1)

达到相同目的的最佳方法是使用数组原型函数sort()

您需要做的是按降序排序并获取前两个元素。

MDN link for sort() documentation

这就是我的写法。

let newArr = arr.sort(function(a, b){
                      return b.value-a.value;
                     });

现在您可以在newArr中获取前两个值。

答案 1 :(得分:0)

数组的单独值。使用Math.max获取最大值,然后使用filter数组,并从第一次搜索中获取另一个不包含max1值的数组,然后对过滤后的数组进行同样的操作。

const arr = [
     { key: 1, value: 1 },
     { key: 2, value: 2 }, 
     { key: 3, value: 3 }, 
     { key: 4, value: 4 }, 
     { key: 5, value: 5 }
];

const valuesMax1 = arr.map(item => item.value);
const max1 = Math.max(...valuesMax1);

const valuesMax2 = valuesMax1.filter(item => item !== max1);
const max2 = Math.max(...valuesMax2);

console.log(max1);
console.log(max2);

另一种简单的方法是对数组进行排序并获取前两个项目

const arr = [
         { key: 1, value: 1 },
         { key: 2, value: 2 }, 
         { key: 3, value: 3 }, 
         { key: 4, value: 4 }, 
         { key: 5, value: 5 }
];

const sorted = arr.sort((f,s) => s.value - f.value);

console.log(sorted[0].value);
console.log(sorted[1].value);