function bubbleSort(toSort) {
let sort = toSort;
let swapped = true;
while(swapped) {
swapped = false;
for(let i = 0; i < sort.length; i++) {
if(sort[i-1] > sort[i]) {
let temp = sort[i-1];
sort[i-1] = sort[i];
sort[i] = temp;
swapped = true;
}
}
}
return sort;
}
let asdf = [1,4,3,2];
let asd = bubbleSort(asdf);
console.log(asdf, asd);
此代码的输出是:[ 1, 2, 3, 4 ] [ 1, 2, 3, 4 ]。
我期望的是: [ 1, 4, 3, 2 ] [ 1, 2, 3, 4 ]。
我想知道的是,为什么这会改变 asdf 变量? bubbleSort 函数获取给定数组 (asdf),复制它(排序),然后处理该变量并返回它,asd 设置为等于。我觉得自己像个白痴,但我不知道为什么会这样:(
最佳答案
The bubbleSort function takes the given array (asdf), makes a copy of it (sort)
不,它没有。赋值不会复制一个对象,它会创建另一个对现有对象的引用。
复制数组的一种简单方法是使用 Array.prototype.slice :
let sort = toSort.slice( 0 );
有关复制对象的更多信息,请参阅:How do I correctly clone a JavaScript object?
关于javascript - 为什么这个函数会改变数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41255297/