es6...扩展运算?

作者站长头像
站长
· 阅读数 6

es6...扩展运算?es6...扩展运算?为什么一定要使用 ...path 才能正确的运行,在上面代码中测试的结果是一样的,而下面则一定要用 ... ?否则就会出现如图2所示的结果

这段代码是 解决 (给定两个整数 n 和 k,返回范围 [1,n] 中所有可能的 k 个数的组合。) 这个问题的 ,用的回溯

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<!--<script src="test.js"></script>-->
<script >
    "use strict";
    let a = [2,3]
    let b = []
    let c = []
    b.push(a)
    c.push([...a])
    console.log(b)
    console.log(c)
    var combine = function(n, k) {
        let result = []
        let path = []
        const backstrack = function(n,k,starIndex){
            if(path.length === k){
                // 保存结果
                // result.push(path)
                result.push([...path])
                return;
            }
            for(let i = starIndex;i<=n;i++){
                path.push(i)
                backstrack(n,k,i+1)
                path.pop()
            }
        }
        backstrack(n,k,1)
        return result
    };
  console.log(combine(4,2))
</script>
</html>
回复
1个回答
avatar
test
2024-06-26

这个用C语言中的指针很好理解,result.push(path),只是创建了个指针,指向了path数组。修改path,就同时修改所有push进入result的值。answer image而result.push([...path])则是对path进行了解构,然后再进行push操作,存入result数组,此时修改path,对result无影响。answer image也可以先看看这个,更好理解。answer image

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容