关于stackoverflow的第一个问题,我正在努力使用这个算法。这应该像5“[[0,1],[2,3],[4,5],[6,7],[8]]”那样在5中切割我的数组,但我得到的只是“[[0 ,1],[2,3],[4,5],[6,7,8]]“
function chunkArrayInGroups(arr, size) {
var newArr = [];
console.log(Math.floor(arr.length / size));
for (i = 0; i <= (Math.floor(arr.length / size)) + 1; ++i) {
var cut = size;
newArr.push(arr.splice(0, cut));
}
if (arr.length > 0) {
newArr.push(arr.splice(0, size + (arr.length - size)));
}
return newArr;
}
chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 2);
// expected - [[0, 1], [2, 3], [4, 5], [6, 7], [8]]
如果您对提问方式有任何提示,我很乐意收到任何建议!
答案 0 :(得分:2)
对for
使用简单的Array#slice
循环,因为切片不会更改原始数组的长度:
function chunkArrayInGroups(arr, size) {
var chunked = [];
for(var i = 0; i < arr.length; i += size) { // increment i by the size
chunked.push(arr.slice(i, i + size));
}
return chunked;
}
var result = chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 2);
console.log(result);
&#13;
答案 1 :(得分:1)
由于使用Array#splice
删除元素,因此数组长度会减少,因此不会计算范围缓存Route::get('taglist/{id}', function($id) {
$tags = Story::find($id)->tags->select('name', 'id as value')->get();
return $tags;
});
循环条件的范围。虽然使用Math.ceil
并避免使用不必要的if语句。
for
答案 2 :(得分:1)
另一种方法是Array#reduce:
function chunkArrayInGroups(arr, size) {
return arr.reduce(function (accum, elem) {
var curr = accum[accum.length - 1];
if (curr.length < size) curr.push(elem); else accum.push([elem]);
return accum;
}, [[]]);
}
var result = chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 2);
console.log( JSON.stringify(result) );
答案 3 :(得分:1)
您可以使用while循环并拼接分组数组所需大小的长度。
function chunkArrayInGroups(array, size) {
var result = [];
while (array.length) {
result.push(array.splice(0, size));
}
return result;
}
console.log(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 2));
答案 4 :(得分:0)
检查一下。
function chunkArrayInGroups(arr, size) {
newArr = [];
for (i=0,j=arr.length; i<j; i+=size) {
newArr.push(arr.slice(i,i+size));
}
return newArr;
}
console.log(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 2));
// expected - [[0, 1], [2, 3], [4, 5], [6, 7], [8]]
答案 5 :(得分:0)
欢迎来到SO。我就是这样做的。如果您对此方法有任何疑问,请与我们联系。
function chunkArrayInGroups(arr, size) {
var newArr = [];
while(arr.length > 0){
newArr.push(arr.splice(0, size));
}
return newArr;
}
答案 6 :(得分:0)
功能上你可以这样做;
function chunkArrayInGroups(a,g){
return Array(Math.ceil(a.length/g)).fill()
.map((_,i) => [a[g*i]].concat(a.slice(g*i+1, g*i+g)));
}
var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8];
result = [];
result = chunkArrayInGroups(arr,2);
console.log(JSON.stringify(result));
result = chunkArrayInGroups(arr,3);
console.log(JSON.stringify(result));
result = chunkArrayInGroups(arr,4);
console.log(JSON.stringify(result));
&#13;