@LastGeneral

Как получить сумму всех элементов массива справа от numbers[i], что бы потом их сравнивать?

Сейчас я сравниваю со значением которое находится сразу после numbers[i], а как сравнить с суммой всех элементов справа?
function getLeaders(numbers) {
  const leader = [];

  for (let i = 0; i < numbers.length; i++) {
    if (numbers[i] > numbers[i + 1]) {
      leader.push(numbers[i]);
    };
  };

  return leader;
}

Пример массива: arrayLeaders([16, 17, 4, 3, 5, 2]);
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Оставить только те элементы массива, что больше суммы всех правее.

Двигаться справа налево. Накапливать сумму. Сранивать очередной элемент с накопленной суммой.
const getLeaders = numbers =>
  numbers.reduceRight(
    (acc, c) => { // acc – аккумулятор, c – очередной элемент массива
      if (c > acc.sum) { // если больше суммы тех, что правее
        acc.result.unshift(c); // положить в массив результатов
      }
      acc.sum += c; // накапливать сумму
      return acc; // аккумулятор пойдёт в следующую итерацию
    },
    { result: [], sum: 0 } // начальное значение acc
  )
  .result; // в итоге интересует только массив result

// использование
getLeaders([16, 17, 5, 4, 3, 1])  // [ 17, 3, 1 ]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы