melkaya94
@melkaya94

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

Есть массив [1, 2, 3, 4, 5, 6, 7, 8, ...]
Нужно разбить его на подмассивы таким образом, чтобы нечетные подмассивы содержали 3 элемента, а четные 2
[[1,2,3], [4,5], [6,7,8], ...]
  • Вопрос задан
  • 945 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
arr.reduce((acc, n, i) => (
  (i && (acc[acc.length - 1].length + !(acc.length & 1) !== 3)) || acc.push([]),
  acc[acc.length - 1].push(n),
  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)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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