如果另一个数组,则会修改数组

时间:2013-06-29 09:13:42

标签: javascript arrays object

真的很奇怪,我正在修改其中一个阵列而另一个正在修改!除了键入数组两次之外,我发现无法使其工作。我该怎么办?

function test(a,b,c,d)
{
    this.a=a;
    this.b=b;
    this.c=c;
    this.d=d;
}

var data0=data=[[1,2,3,4],[5,6,7,8]];

function construct(constructor,args)
{
    function F(){return constructor.apply(this,args);}
    F.prototype=constructor.prototype;
    return new F();
}

for(var i=0,l=data.length;i<l;i++)
{
    data[i]=construct(test,data[i]);
}

console.log(data0);

http://jsfiddle.net/mageek/3GNMC/2/

2 个答案:

答案 0 :(得分:2)

您正在引用相同的项目:

var data0=data=[[1,2,3,4],[5,6,7,8]];

(作为旁注 - 这里data最终在全局对象上,因为它没有真正声明,只有data0是)

如果要生成两个具有相同项目的不同数组,可以执行以下操作:

var data0 =[[1,2,3,4],[5,6,7,8]];
var data = [];

data = data.concat(data0);

 data = data0.slice(0);

答案 1 :(得分:1)

JavaScript不会在data0=data赋值时复制数组,而是将两个变量都指向内存中的同一个对象。您需要完全克隆数组,例如:

var data0 = data.slice(0);