Javascript 为什么这个函数会改变数据? 函数bubbleSort(toSort){ 让sort=toSort; 让交换=真; while(交换){ 交换=假; for(设i=0;i排序[i]){ 设temp=sort[i-1]; 排序[i-1]=排序[i]; 排序[i]=临时; 交换=真; } } } 返回排序; } 设asdf=[1,4,3,2]; 设asd=bubbleSort(asdf); 控制台日志(asdf、asd);
此代码的输出为:[1,2,3,4][1,2,3,4] 我所期望的:[1,4,3,2][1,2,3,4] 我想知道的是,为什么这会变异asdf变量?bubbleSort函数获取给定的数组(asdf),复制它(sort),然后处理该变量并返回它,asd设置为等于该变量。我觉得自己像个白痴,但我不知道为什么会这样:( bubbleSort函数接受给定的数组(asdf),复制它(排序) 不,不会。赋值不会复制对象,它会创建对现有对象的另一个引用 复制阵列的一种简单方法是使用: 有关复制对象的详细信息,请参见: bubbleSort函数接受给定的数组(asdf),复制它(排序) 不,不会。赋值不会复制对象,它会创建对现有对象的另一个引用 复制阵列的一种简单方法是使用:Javascript 为什么这个函数会改变数据? 函数bubbleSort(toSort){ 让sort=toSort; 让交换=真; while(交换){ 交换=假; for(设i=0;i排序[i]){ 设temp=sort[i-1]; 排序[i-1]=排序[i]; 排序[i]=临时; 交换=真; } } } 返回排序; } 设asdf=[1,4,3,2]; 设asd=bubbleSort(asdf); 控制台日志(asdf、asd);,javascript,immutability,mutable,Javascript,Immutability,Mutable,此代码的输出为:[1,2,3,4][1,2,3,4] 我所期望的:[1,4,3,2][1,2,3,4] 我想知道的是,为什么这会变异asdf变量?bubbleSort函数获取给定的数组(asdf),复制它(sort),然后处理该变量并返回它,asd设置为等于该变量。我觉得自己像个白痴,但我不知道为什么会这样:( bubbleSort函数接受给定的数组(asdf),复制它(排序) 不,不会。赋值不会复制对象,它会创建对现有对象的另一个引用 复制阵列的一种简单方法是使用: 有关复制对象的详细信息,请
有关复制对象的详细信息,请参阅:您正在对作为可变函数参数提供的输入列表进行排序。当您将列表分配给新变量时,它不会创建“副本”,而是创建另一个指向同一列表、同一数据的引用,然后对其进行排序。这就是为什么asdf和add变量都是可变的e是一样的,因为它们是指向相同内存位置、相同数据的两个变量
如果您希望复制数组,以便不修改输入数组,请查看javascript切片()方法。您正在对作为可变函数参数提供的输入列表进行排序。当您将列表分配给新变量时,它不会创建“副本”,它只会创建指向相同列表、相同数据的另一个引用,然后对其进行排序。这就是为什么asdf和add变量都是相同的,因为它们是两个变量B指向相同内存位置、相同数据的les
如果您希望复制数组以避免修改输入数组,请查看javascript slice()方法。您需要克隆原始数组以避免在原始数组中发生更改。可以使用
let sort=toSort;
替换为let sort=toSort.slice(0);
或
let sort = toSort.slice( 0 );
或
函数bubbleSort(toSort){
设sort=toSort.slice(0);
让交换=真;
while(交换){
交换=假;
for(设i=0;i排序[i]){
设temp=sort[i-1];
排序[i-1]=排序[i];
排序[i]=临时;
交换=真;
}
}
}
返回排序;
}
设asdf=[1,4,3,2];
设asd=bubbleSort(asdf);
console.log(asdf,asd);
您需要克隆原始阵列以避免在原始阵列中发生更改。可以使用
let sort=toSort;
替换为let sort=toSort.slice(0);
或
let sort = toSort.slice( 0 );
或
函数bubbleSort(toSort){
设sort=toSort.slice(0);
让交换=真;
while(交换){
交换=假;
for(设i=0;i排序[i]){
设temp=sort[i-1];
排序[i-1]=排序[i];
排序[i]=临时;
交换=真;
}
}
}
返回排序;
}
设asdf=[1,4,3,2];
设asd=bubbleSort(asdf);
console.log(asdf,asd);
复制数组,让sort=toSort.slice();
-请参阅此创建数组副本,让sort=toSort.slice();
-请参阅此
let sort=[];
for(var i=0;i < toSort.length;i++){
sort[i]=toSort[i];
}
let sort = Array.from(toSort);
let sort = toSort.concat();