我的代码中遇到了一个奇怪的错误,我无法理解它为什么会发生。
我有一个数组array1。我通过使array2等于array1来复制array1。然后我使用splice修改array2以添加数字。不应该触摸Array1?但两者都输出相同的变化。
var array1 = [0,1,2,3,4,5];
var array2 = array1;
array2.splice(1,0,1) //add
console.log(array1);
console.log(array2);
我假设我混淆阵列分配?在没有发生这种情况的情况下复制数组的正确方法是什么?
干杯
答案 0 :(得分:3)
使用array1.concat()
复制数组,而不是将引用传递给array1
:
var array1 = [0,1,2,3,4,5];
var array2 = array1.concat();
array2.splice(1,0,1) //add
console.log(array1);
console.log(array2);
array.concat()
可以连接多个数组,但如果你传递一个空参数,你就可以有效地连接数组:克隆数组。
请注意,任何数组和对象元素仍然是引用:
var a = [ [1], 2];
var b = a.concat();
b[0][0] = 0;
console.log(b); // gives 0,2
console.log(c); // gives 0,2 too!
答案 1 :(得分:0)
如果你使用的是jQuery,你可以这样做:
var array1 = [0,1,2,3,4,5];
var array2 = array1.slice();
array2.splice(1,0,1) //add
console.log(array1);
console.log(array2);
查看此example。
答案 2 :(得分:-1)
通过引用复制数组和对象。试试这个:
Object.prototype.clone = function() {
var newObj = (this instanceof Array) ? [] : {};
for (i in this) {
if (i == 'clone') continue;
if (this[i] && typeof this[i] == "object") {
newObj[i] = this[i].clone();
} else newObj[i] = this[i]
} return newObj;
}
var array1 = [0,1,2,3,4,5];
var array2 = array1.clone();