melkaya94
@melkaya94

Как разбить массив на подмассивы?

Есть массив [1, 2, 3, 4, 5, 6, 7, 8, ...]
Нужно разбить его на подмассивы таким образом, чтобы нечетные подмассивы содержали 3 элемента, а четные 2
[[1,2,3], [4,5], [6,7,8], ...]
  • Вопрос задан
  • 140 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
arr.reduce((acc, n) => {
  const len = acc[acc.length - 1]?.length;
  if (!len || len === 3 || (len === 2 && !(acc.length & 1))) {
    acc.push([]);
  }

  acc[acc.length - 1].push(n);

  return acc;
}, [])
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
const repack = arr => {
  const result = [...new Array(1 + Math.floor((arr.length - 1) / 2.5))].map(() => []);
  arr.forEach((el, i) => result[Math.floor(i / 2.5)].push(el));
  return result;
}

JSON.stringify(repack([1, 2, 3, 4, 5, 6, 7, 8, 9]))
// "[[1,2,3],[4,5],[6,7,8],[9]]"


Здесь несколько моментов, которые ещё пригодятся в других задачах:
  1. Создание массива нужно длины с заполнением начальными значениями
    [...new Array(length)].fill(value) // тут не годится, т.к. заполняем пустыми массивами
    // и чтобы это не был один и тот же массив («передача по ссылке»)
    // заполняем другим способом, через map()
    [...new Array(length)].map(() => [])
  2. получение чередующегося ряда 3, 2, 3, 2, ... через Math.floor(i / 2.5)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
02 апр. 2020, в 16:07
3000 руб./за проект
02 апр. 2020, в 16:01
5000 руб./за проект
02 апр. 2020, в 15:54
1000 руб./за проект