push(array)和push([…array])的区别

Leecode77题中发现的有关push(array)和push([…array])的区别,记录一下。

题目:

给定两个整数 nk,返回范围 [1, n] 中所有可能的 k 个数的组合。

你可以按 任何顺序 返回答案。

答案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var combine = function(n, k) {

let res = [];
let sub_res = [];
const backtracking = function(n, k, startIndex){
if(sub_res.length === k){
res.push(sub_res);
return;
}
for(let i = startIndex; i <= n; i++){
sub_res.push(i);
backtracking(n, k , i+1);
sub_res.pop();
}
}
backtracking(n, k, 1)
return res;
};

我这个答案得出的结果是 [[],[],[],[]….]

在查看别人代码之后,发现了差异,是push(array)和push([…array])的区别。

解析

  • res.push(path) 等于把 path 的引用,追加到了数组里面。所以如果path被改变了,res里面的也会改变。
  • res.push([…path]),这里等于把 path 的内容拿出来,重新构建了一个数组。然后追加。这里重点是切断了引用关系。