使用javascript获取数组的第一和第二最高值

时间:2018-10-01 20:31:21

标签: javascript arrays max

我正在尝试执行以下代码:

function oldestAges(ages){
    if (ages == []){
      return [0,0]; 
    }else{
      var max = Math.max.apply(null, ages); 
              ages.splice(ages.indexOf(max), 1); 
      var max2 = Math.max.apply(null, ages); 
      return [max2,max];
  }
}

但是,当将[]作为年龄进行测试时,预期值为'[0,0]',而是:'[-Infinity,-Infinity]'

此外,有没有更简单的方法来完成相同的任务?我问,因为使用R可以以更少的行数获得相同的结果。我对JavaScript还是一无所知。

3 个答案:

答案 0 :(得分:1)

您可以按降序对数组进行排序,以使前两个元素包含最高值。

ages.sort((a, b) => b - a);

现在ages[0]ages[1]包含两个最大的数字。

答案 1 :(得分:1)

一种简单的方法(不确定最佳方法):

const input = [5, 150, 2, 8, 58, 4];

const result = input.sort((x, y) => y - x).slice(0, 2);

console.log(result);

答案 2 :(得分:1)

ages.length == 0是您可以用来查看数组中元素的数量是否为零的方法。

您的代码在您说if (ages == [])时出错。

尝试一下

function oldestAges(ages){
        if (ages.length == 0){
          return [0,0];
        }else{
          var max = Math.max.apply(null, ages);
                  ages.splice(ages.indexOf(max), 1);
          var max2 = Math.max.apply(null, ages);
          return [max2,max];
      }
    }