复制数组javascript拼接

复制数组javascript拼接,javascript,arrays,duplication,splice,Javascript,Arrays,Duplication,Splice,我在我的代码中遇到了一个奇怪的bug,我无法理解它为什么会发生 我有一个数组1。我通过使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); 我假设我混淆了数

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

我有一个数组1。我通过使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);
我假设我混淆了数组赋值?在不发生这种情况的情况下复制阵列的正确方法是什么


Cheers

数组和对象通过引用进行复制。试试这个:

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();
使用
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!

如果使用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);

检查此项。

clone()
不是本机javascript函数。
array.clone
不是javascript内置函数,它是由Mootools在您的示例中提供的。干得好;这是做这件事的正确方法。请参见-->结果,如果我简单地执行“var array2=array1.splice();”,这将使其独立。真不敢相信我从来不知道这个…不要扩展Object.prototype-->