【问题标题】:duplicating arrays javascript splicing复制数组javascript拼接
【发布时间】:2011-10-29 23:58:31
【问题描述】:

我在我的代码中遇到了一个奇怪的错误,我不明白为什么会发生。

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

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

干杯

【问题讨论】:

  • 事实证明,如果我简单地执行“var array2 = array1.splice();”这使它独立。不敢相信我从来不知道这个......

标签: javascript arrays duplication splice


【解决方案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();

【讨论】:

【解决方案2】:

使用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!

【讨论】:

【解决方案3】:

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

【讨论】:

  • clone() 不是原生 javascript 函数。
  • array.clone 不是内置的 Javascript,它是由 Mootools 在您的示例中提供的。
猜你喜欢
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
  • 2010-12-24
  • 2018-10-19
  • 2015-02-22
  • 2018-06-25
相关资源
最近更新 更多