【问题标题】:By splicing a array, somehow spliced another array (JS) [duplicate]通过拼接一个数组,以某种方式拼接另一个数组(JS)[重复]
【发布时间】:2017-10-15 22:06:18
【问题描述】:

这里是新手

我最近在使用 array.splice 方法从列表中删除元素时遇到了一个问题。代码类似这样

var A = [0,1,2,3,4,5];
var B = A;
B.splice(3,1)
console.log(B) //returns [ 0, 1, 2, 4, 5 ]
console.log(A) //returns [ 0, 1, 2, 4, 5 ]

不知何故,拼接 B 也拼接了 A。

我尝试创建自己的函数来删除一个元素。同样的问题。

var deleteElement = function(array,index){
  var array2=array;   
  for(i=index;i<array2.length;i++){ 
    array2[i]=array2[i+1]    
  }
  array2.pop();
  return array2;
}
  var A = [ 0, 1, 2, 3, 4, 5, 6, 7 ]
  var B = deleteElement(A,4)
  
  console.log(A) //returns [ 0, 1, 2, 3, 5, 6, 7 ]
  console.log(B) //returns [ 0, 1, 2, 3, 5, 6, 7 ]   

我不知道为什么通过改变 B 来改变 A。任何帮助将不胜感激。

【问题讨论】:

标签: javascript arrays


【解决方案1】:

“不知何故”数组是可变的,B 是对 A 的引用。改变 B,你改变 A。你需要创建一个不是引用的克隆。

const a = [1,2,3,4,5];
const b = a.slice(0);
//b is a copy of a with no reference

b.splice(3,1);
console.log(b);
console.log(a);

【讨论】:

    【解决方案2】:
    var A = [0,1,2,3,4,5];
    var B = A.slice(0);
    B.splice(3,1)
    console.log(B)
    console.log(A)
    

    在javascript中遍历深拷贝和浅拷贝。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-11
      • 2015-02-14
      • 2018-09-09
      • 1970-01-01
      • 2023-01-23
      • 1970-01-01
      • 2018-06-25
      • 2012-10-24
      相关资源
      最近更新 更多