1

真的很奇怪,我正在修改一个数组,而另一个被修改了!除了键入两次数组之外,我发现没有其他方法可以使它工作。我能做些什么?

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/

4

2 回答 2

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);
于 2013-06-29T09:17:49.100 回答
1

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

var data0 = data.slice(0);
于 2013-06-29T09:17:16.387 回答