复制数组javascript拼接

时间:2011-08-18 17:17:16

标签: javascript arrays duplication splice

我的代码中遇到了一个奇怪的错误,我无法理解它为什么会发生。

我有一个数组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);

我假设我混淆阵列分配?在没有发生这种情况的情况下复制数组的正确方法是什么?

干杯

3 个答案:

答案 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();