@New-Developer
Изучаю JavaScript

Как последовательные числа сложить в отдельные массивы?

Как из массива чисел

[-1, 0, 1, 2, 3, 5, 7, 8, 9, 11, 14, 15, 17, 18, 20]

получить вложенные массивы последовательных чисел только встроенными функциями JS?
Чтобы получилось:

[[-1, 0, 1, 2, 3], [5], [7, 8, 9], [11], [14, 15], [17, 18], [20]]
  • Вопрос задан
  • 288 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const groupAdjacent = (arr, newGroup) =>
  arr.reduce((acc, n, i, a) => (
    (!i || newGroup(n, a[~-i])) && acc.push([]),
    acc[~-acc.length].push(n),
    acc
  ), []);


const result = groupAdjacent(arr, (c, p) => c !== -~p);

или (если гарантируется, что элементы массива образуют возрастающую последовательность)

function group(data, key) {
  const grouped = new Map;
  let i = -1;

  for (const n of data) {
    const k = key(n, ++i);
    grouped.set(k, grouped.get(k) ?? []).get(k).push(n);
  }

  return grouped;
}


const result = [...group(arr, (n, i) => n - i).values()];
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект
22 нояб. 2024, в 22:26
3500 руб./за проект