получить первое и второе по величине значения массива, используя JavaScript - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь выполнить следующий код:

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, -Бесконечность] '

Кроме того, есть ли намного более простой способ выполнить ту же задачу?Я спрашиваю, потому что использование RI может получить тот же результат в гораздо меньшем количестве строк.Я нуб в Javascript до сих пор.

Ответы [ 3 ]

0 голосов
/ 01 октября 2018

Простой (не уверенный в наиболее оптимальном) способ достижения этого:

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

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

console.log(result);
0 голосов
/ 01 октября 2018

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];
      }
    }
0 голосов
/ 01 октября 2018

Вы можете отсортировать массив в порядке убывания, чтобы первые два элемента содержали самые высокие значения.

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

Теперь ages[0] и ages[1] содержат два самых больших числа.

...