Разбить массив на подмассивы вывести их сумму

Есть массив с 5 чисел

const Arr = [1,2,3,4,5]

Надо написать функцию которая принимает массив Arr и некоторое число k (длина подмассива). Функция перебирает все возможные комбинации подмассива например [1,2,3]; [1,2,4]; [1,2,5] и тд и выводит сумму каждого подмассива. Вообщем нужно посчитать все возможные суммы 3х чисел


Ответы (1 шт):

Автор решения: entithat

Будем использовать рекурсию и Set(), чтобы убрать дубликаты. Тут надо думать с конца. Проходимся по каждому массиву, который вернёт нам функция comb(). Дальше проходимся по каждому элементу нашего исходного массива и если такое значение уже есть в массиве (полученного с comb()), то пропускаем эту итерацию. А иначе добавляем в массив.

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

function comb(arr, depth) {
  const res = new Set();
  if (depth === 0) res.add([]);
  else {
    for (const pc of comb(arr, depth - 1)) {
      for (const e of arr) {
        if (pc.indexOf(e) !== -1) break;
        res.add([e, ...pc].sort((a, b) => a - b));
      }
    }
  }
  return res;
}

console.log([...comb([1, 2, 3, 4, 5], 3)].map(e => [e, e.reduce((a, b) => a + b, 0)]));

→ Ссылка