在不链接引用的情况下更改数组

时间:2014-05-07 23:39:35

标签: javascript arrays

也许我会以错误的方式解决这个问题,如果有的话,请告诉我!

无论如何,我说有一个代表一些不错数据的数组。

var orignal = ['a', 'b'];
var copy = orignal;
orignal.push('c');
console.log(original === copy);  // true

我有点喜欢这个功能,其中to对象仍然是相同的。当然,如果我将original = ['c']设置为不再是这种情况。是否有任何模式可以让我在阵列上做更多的事情而不会破坏链接?

2 个答案:

答案 0 :(得分:0)

分配是破坏链接的一件事,因为它是对引用的操作,而不是数组。它使变量引用到其他地方。通过originalcopy

可以看到您执行的任何其他操作
copy.length = 5; // visible through original
copy[3] = 4;     // visible through original
copy.pop();      // visible through original

如果您认为您希望赋值来保留链接,那么您应该做一些类似但不同的操作,例如使用另一个内容填充数组。

顺便说一下,调用变量copy可能是一个坏主意,因为它不是副本。这是原作,就像original一样。

答案 1 :(得分:-1)

你应该继承:

function inherits(base, extension)
{
   for ( var property in base )
   {
      try
      {
         extension[property] = base[property];
      }
      catch( warning ){}
   }
}

然后:

var original = ['a', 'b'];
var copy=[]; inherits(original,copy) //NOT : var copy = orignal;
original.push('c');
console.log(original === copy);  // false

DEMO: http://jsfiddle.net/abdennour/e64vB/1/