为什么b的值在第二次迭代后自己增加?

时间:2019-07-05 09:52:11

标签: javascript

我只是在这段代码中处理数组,即使代码没有进入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

1 个答案:

答案 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);