Я немного изменил ваш код, чтобы получить желаемый результат.Вы можете использовать оператор %
, а также не забудьте добавить последнюю часть в конце цикла for
:
var data = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30'];
function chunkifyArray(input, chunkSize, offset=0) {
let output = [], tmp = [];
input = new Array(offset).fill('').concat(input);
for (var i = 0; i < input.length; i++) {
tmp.push(input[i])
if (i && i%chunkSize == 0) {
output.push(tmp);
tmp = []
}
}
output.push(tmp); // add the remaining ones
return output;
}
console.log(chunkifyArray(data, 7, 3));
Вы можете chunk
массив с ES6 и Array.reduce
:
const data = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30']
const chunkBy = (arr, by=2, offset=0) => new Array(offset).fill('').concat(arr)
.reduce((r,c,i) => (i%by==0 ? r.push([c]) : r[r.length-1] = [...r[r.length-1], c], r), [])
console.log(chunkBy(data, 7, 3))
Если не в форме compact
, это будет выглядеть следующим образом:
const data = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30']
const chunkBy = (arr, by=2, offset=0) => {
arr = new Array(offset).fill('').concat(arr)
return arr.reduce((r,c,i) => {
if(i%by==0)
r.push([c])
else
r[r.length-1] = [...r[r.length-1], c]
return r
}, [])
}
console.log(chunkBy(data, 7, 3))