push(array)和push([…array])的区别
刷Leecode77题中发现的有关push(array)和push([…array])的区别,记录一下。
题目:
给定两个整数 n
和 k
,返回范围 [1, n]
中所有可能的 k
个数的组合。
你可以按 任何顺序 返回答案。
答案:
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 的内容拿出来,重新构建了一个数组。然后追加。这里重点是切断了引用关系。