Я хочу найти максимальное число среди первого и второго элементов каждого массива внутри массива массивов отдельно:

function largestOfElements(mainArray) {
  return mainArray.map(function(subArray) {
    return subArray.reduce(function(previousLargestNumber, currentLargestNumber) {
      return (currentLargestNumber > previousLargestNumber) ? currentLargestNumber : previousLargestNumber;
    }, 0);
  });
}
console.log(largestOfElements([
  [],
  [13, 47],
  [38, 35],
  [24, 34]
]));
.as-console-wrapper {
  max-height: 100% !important;
  top: 0;
}

Текущий способ возвращает массив наибольших чисел в каждом массиве. Как я могу вернуть самый большой из первых элементов и самый большой из вторых элементов? ожидаемый результат будет:

[38, 47]

0
moaningalways 15 Мар 2018 в 04:30

1 ответ

Лучший ответ

Вы можете использовать функцию reduce.

  • Начальное значение для функции reduce - это минимальные значения, чтобы начать получать максимальные значения.
  • Проверьте длину текущего массива.
  • Используйте деструктурирующее присвоение, чтобы получить первое и второе значение [первое, второе].
  • Сравните текущее значение с первым и вторым соответственно, чтобы получить максимальное значение.
var array = [
  [],
  [13, 47],
  [38, 35],
  [24, 34]
];

var result = Object.values(array.reduce((a, c) => {
  if (c.length) {
    var [first, second] = c;
    if (first > a.f) a.f = first;
    if (second > a.s) a.s = second;
  }
  
  return a;
}, {f: Number.MIN_VALUE, s: Number.MIN_VALUE}));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
2
Ele 15 Мар 2018 в 04:51