我有阵列:
arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14];
然后我想制作4个元素组。 每次迭代时,必须修改此数组,直到它获得最终结果。
第1步:
arr = [[1,2,3,4],5,6,7,8,9,10,11,12,13,14];
第2步:
arr = [[1,2,3,4],[5,6,7,8],9,10,11,12,13,14];
第3步:
arr = [[1,2,3,4],[5,6,7,8],[9,10,11,12],13,14];
第3步:
arr = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14]];
这怎么可能?
我试过了:
var array = [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
var i,j,temparray,chunk = 4;
for (i=0,j=array.length; i<j; i+=chunk) {
temparray = array.slice(i,i+chunk);
console.log(temparray);
}
但我不知道如何将这个块保存到自己的数组中而不是新数组中。
答案 0 :(得分:3)
您可以拼接数组,直到长度小于最后一次插入的索引。
var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
i = 0;
while (i < array.length) {
array.splice(i, 0, array.splice(i, 4));
console.log(JSON.stringify(array));
i++;
}
答案 1 :(得分:3)
使用Array#reduce方法。
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
newArr = arr.reduce((acc, item, index) => {
if ((index) % 4 === 0) {
acc.push([item]);
} else {
acc[acc.length - 1].push(item);
}
return acc;
}, []);
console.log(newArr); // [ [ 1, 2, 3, 4 ], [ 5, 6, 7, 8 ], [ 9, 10, 11, 12 ], [ 13, 14 ] ]
&#13;
答案 2 :(得分:2)
lodash可能比我的实现有更好的性能,但是如果你想用vanilla javascript这样做那么你可以喜欢这个(尽管还有很多其他方法):
var arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14];
var newArr = arr.reduce((acc, val, idx)=>{
if(idx % 4 === 0){
acc.push([]);
}
acc[acc.length-1].push(val)
return acc
}, [])
console.log(newArr);
答案 3 :(得分:1)
lodash方法chunk
将为您完成此操作。
result = _.chunk(arr, 4);
答案 4 :(得分:1)
function chunkArray(myArray, chunk_size){
var index = 0;
var arrayLength = myArray.length;
var tempArray = [];
for (index = 0; index < arrayLength; index += chunk_size) {
myChunk = myArray.slice(index, index+chunk_size);
// Do something if you want with the group
tempArray.push(myChunk);
}
return tempArray;
}
// Split in group of 3 items
var result = chunkArray([1,2,3,4,5,6,7,8], 3);
// Outputs : [ [1,2,3] , [4,5,6] ,[7,8] ]
console.log(result);
答案 5 :(得分:1)
只需将其推送到生成的数组:
const chunk = 4, result = []
for (var i = 0, j = array.length; i < j; i += chunk) {
result.push(array.slice(i,i + chunk));
}
答案 6 :(得分:1)
我认为如果我使用recursive calls
添加另一个解决方案,快乐编码也会很有趣!
在这里测试
function split(arr, offset, res){
//stop condition (offset exceeds len of array)
if(offset>arr.length)
return res;
//slice 4 elms
res.push(arr.slice(offset,offset+4));
//recursion
return split(arr, offset+4, res);
}
var res = split([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], 0, []);
console.log(res);