这个数组重新分配对我来说没有意义



所以我试图解决这个算法,我必须从给定的数组(第一个参数(中求和 4 个数字才能获得第二个传递的参数,并且我以一种非常愚蠢的方式这样做(问题不是关于解决算法(。 问题是:为什么我不能从数组中删除值并再次重新创建/重新分配自己,希望能做到这一点。这只是Javascript的工作方式还是我做错了什么? 提前感谢!

function foo(arr1, sum){
let arr = arr1;
for(let i=0; i<9999;i++){
let val1=arr[Math.floor(Math.random()*arr.length)];
arr.splice(arr.indexOf(val1),1);
console.log(arr1);
let val2=arr[Math.floor(Math.random()*arr.length)];
arr.splice(arr.indexOf(val2),1);
let val3=arr[Math.floor(Math.random()*arr.length)];
arr.splice(arr.indexOf(val3),1);
let val4=arr[Math.floor(Math.random()*arr.length)];
arr.splice(arr.indexOf(val4),1);
if(val1+val2+val3+val4 == sum){
console.log(val1,val2,val3,val4);
return [val1,val2,val3,val4]; 
}
arr=arr1;
}
}
console.log(foo([2, 7, 4, 0, 9, 5, 1, 3], 20));

实际上arr1不是数组本身,而是对数组的引用。如果执行arr = arr1则复制该引用,并且该引用指向与arr1相同的数组。因此,如果更改arr引用的数组,则也会更改arr1引用的数组。复制数组:

arr = arr1.slice();

相关内容

最新更新