Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.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 为什么这个函数会改变数据? 函数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 - Fatal编程技术网

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 为什么这个函数会改变数据? 函数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),复制它(排序) 不,不会。赋值不会复制对象,它会创建对现有对象的另一个引用 复制阵列的一种简单方法是使用: 有关复制对象的详细信息,请

此代码的输出为:[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),复制它(排序)

不,不会。赋值不会复制对象,它会创建对现有对象的另一个引用

复制阵列的一种简单方法是使用:


有关复制对象的详细信息,请参阅:

您正在对作为可变函数参数提供的输入列表进行排序。当您将列表分配给新变量时,它不会创建“副本”,而是创建另一个指向同一列表、同一数据的引用,然后对其进行排序。这就是为什么asdf和add变量都是可变的e是一样的,因为它们是指向相同内存位置、相同数据的两个变量


如果您希望复制数组,以便不修改输入数组,请查看javascript切片()方法。

您正在对作为可变函数参数提供的输入列表进行排序。当您将列表分配给新变量时,它不会创建“副本”,它只会创建指向相同列表、相同数据的另一个引用,然后对其进行排序。这就是为什么asdf和add变量都是相同的,因为它们是两个变量B指向相同内存位置、相同数据的les


如果您希望复制数组以避免修改输入数组,请查看javascript slice()方法。

您需要克隆原始数组以避免在原始数组中发生更改。可以使用

  • slice()原型方法
  • 循环
  • 数组。from()
  • concat()
  • 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);
    您需要克隆原始阵列以避免在原始阵列中发生更改。可以使用

  • slice()原型方法
  • 循环
  • 数组。from()
  • concat()
  • 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();