Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的控制台结果在不同的范围内是不同的 var permute=函数(nums){ 让列表=[]; 生成=函数(标志、结果){ 如果(标志===nums.length){ list.push(结果);//向列表中添加内容 返回; } //同位遍历 对于(让i=0;i_Javascript_Arrays - Fatal编程技术网

Javascript 为什么我的控制台结果在不同的范围内是不同的 var permute=函数(nums){ 让列表=[]; 生成=函数(标志、结果){ 如果(标志===nums.length){ list.push(结果);//向列表中添加内容 返回; } //同位遍历 对于(让i=0;i

Javascript 为什么我的控制台结果在不同的范围内是不同的 var permute=函数(nums){ 让列表=[]; 生成=函数(标志、结果){ 如果(标志===nums.length){ list.push(结果);//向列表中添加内容 返回; } //同位遍历 对于(让i=0;i,javascript,arrays,Javascript,Arrays,注释出result.pop将起作用。这是因为Javascript通过引用而不是值来传递对象/数组。您可能希望通读以下内容以完全理解它列表不是空的…其中有24个空数组您是指result.pop()影响控制台结果?是的,你是对的,但为什么?你还有其他问题-如果你在代码中分散一些控制台日志,你会发现你根本不会得到排列…你最终(在全部销毁之前)使用相同的24次置换,当您将数组作为参数传入时,它是通过引用传递的,根据您正在做的事情,我猜您希望创建数组的副本 var permute = function(n

注释出
result.pop
将起作用。这是因为Javascript通过引用而不是值来传递对象/数组。您可能希望通读以下内容以完全理解它

列表不是空的…其中有24个空数组您是指result.pop()影响控制台结果?是的,你是对的,但为什么?你还有其他问题-如果你在代码中分散一些控制台日志,你会发现你根本不会得到排列…你最终(在全部销毁之前)使用相同的24次置换,当您将数组作为参数传入时,它是通过引用传递的,根据您正在做的事情,我猜您希望创建数组的副本
var permute = function(nums) {
    let list=[];
    generate=function(flag,result){
        if(flag===nums.length){
            list.push(result);//add something to list
            return ;
        } 
        //同位遍历
        for(let i =0;i<nums.length;i++){
            //skip重复
            if(result.includes(nums[i])) continue;
            result.push(nums[i]);
            generate(flag+1,result);
            //递归结束后弹出尾项
            result.pop();
        }
    }
    generate(0,[]);
    console.log(list);//but it's empty
};


permute([1,2,3,4]);