所以我试图解决这个算法,我必须从给定的数组(第一个参数(中求和 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();