我只是在这段代码中处理数组,即使代码没有进入if块中,b的值仍在增加?
function chunkArrayInGroups(arr, size) {
// Break it up.
let ar = [];
let b = [];
for (let i = 0; i < arr.length; i++) {
ar.push(arr[i]);
console.log(b, i);
if ((i + 1) % size == 0) {
b.push(ar);
}
}
return arr;
}
console.log(chunkArrayInGroups(["a", "b", "c", "d"], 2));
expected:[],0
[],1
[a,b],2
[a,b],3
obtained:[],0
[],1
[a,b,c],2
[a,b,c,d],3
答案 0 :(得分:1)
由于使用b.push(ar)
时,您输入的地址不是ar
的值。因此,ar
更改时,b
也更改。要获得预期的输出,您应该使用b.push(...ar)
,它将创建ar
的副本。
演示:
function chunkArrayInGroups(arr, size) {
// Break it up.
let ar=[];
let b=[];
for(let i=0;i<arr.length;i++)
{
ar.push(arr[i]);
console.log(b,i);
if((i+1)%size==0)
{
b.push(...ar);
}
}
return arr;
}
chunkArrayInGroups(["a", "b", "c", "d"], 2);