Задать вопрос
squadbrodyaga
@squadbrodyaga
帆は風を変えた

Как уменьшить массив в два раза сложив значения?

Предположим есть вот такой массив с рандомными числами:
// Тут 12 случайных чисел
const numbers = [0, 1, 5, 0, 4, 1, 3, 6, 0, 1, 5, 4]

Как уменьшить этот массив в два раза, сложив два соседних числа вместе:
0 + 1 = 1,   5 + 0 = 5,   4 + 1 = 5

// И массив становится таким, где уже 6 чисел:
numbers = [1, 5, 5, 9, 1, 9]
  • Вопрос задан
  • 253 просмотра
Подписаться 1 Простой 3 комментария
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Делаем просто:

const result = arr.reduce((acc, n, i) => (
  (i & 1) || acc.push(0),
  acc[~-acc.length] += n,
  acc
), []);

Делаем сложно:

function* chunked(data, chunkSize) {
  const iter = data[Symbol.iterator]();

  for (let chunk = [], n; !n?.done && (n = iter.next());) {
    if (!n.done) {
      chunk.push(n.value);
    }

    if (chunk.length === chunkSize || (n.done && chunk.length)) {
      yield chunk;
      chunk = [];
    }
  }
}

function sum(data, val = n => n) {
  const getVal = val instanceof Function ? val : n => n[val];
  let result = 0;

  for (const n of data) {
    result += getVal(n);
  }

  return result;
}

const result = Array.from(chunked(arr, 2), n => sum(n));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы