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

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

题目:

给定两个整数 nk,返回范围 [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 的内容拿出来,重新构建了一个数组。然后追加。这里重点是切断了引用关系。