Имеется массив
[0,1,2,3,4,5,6,7,8,9]
в итоге нужно разбить на подмассивы
[[0,1],[2,3,4],[5,6], [7,8,9]]
Метод ниже разделяет исходный массив на подмассивы такого вида
[[0,1],[2,3],[4,5],[6,7],[8,9]]
let arrayIndex = -1;
const newArr = [0,1,2,3,4,5,6,7,8,9].reduce((final, curr, i) => {
if (i%2 === 0) {
final.push([curr])
arrayIndex++;
} else {
final[arrayIndex].push(curr);
}
return final;
}, []);
Как доработать метод, чтобы добиться ожидаемого результата?
let arrayIndex = -1;
const newArr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].reduce((final, curr, i) => {
if (i % 5 === 0 || i % 5 === 2) {
final.push([curr])
arrayIndex++;
} else {
final[arrayIndex].push(curr);
}
return final;
}, []);
console.log(newArr);
Условия по сохранению целостности оригинального массива нет, если есть - можно скопировать массив перед сплайсами, а так - вот:
let arr = [0,1,2,3,4,5,6,7,8,9];
let result = [];
while (arr.length)
result.push(arr.splice(0, 2), arr.splice(0, 3))
console.log(JSON.stringify(result));
Или так:
let arr = [0,1,2,3,4,5,6,7,8,9];
let result = [2,3,2,3].map(i => arr.splice(0, i));
console.log(JSON.stringify(result));
PS: это конечно не универсально
Для произвольного набора длин подмассивов
const array = [0,1,2,3,4,5,6,7,8,9,10],
chunk = [2,3],
al = array.length, cl = chunk.length;
var ic = 0,
newArr = [],
i = 0;
while(i < al) {
// перебираем по кругу массив длин (chunck)
// и вырезаем подмассив с текущего индекса нужной длины методом slice
newArr.push(array.slice(i,i+chunk[ic]));
i += chunk[ic];
ic = (ic+1) % cl;
}
console.log(newArr)
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости