新手在这里
我最近在使用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而改变。任何帮助都会非常感激。
答案 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中浏览深层复制和浅层复制。