通过拼接数组,以某种方式拼接另一个数组(JS)

时间:2017-10-15 22:06:19

标签: javascript arrays

新手在这里

我最近在使用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 ]   

我不知道为什么A会因改变B而改变。任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:1)

“不知何故”阵列是变异的,B是对A. Alter 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);

答案 1 :(得分:0)

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

在javascript中浏览深层复制和浅层复制。