Javascript 如果另一个数组修改,则该数组将被修改
真奇怪,我正在修改一个数组,而另一个数组被修改了!我发现除了键入两倍数组之外,没有其他方法可以让它工作。我能做什么Javascript 如果另一个数组修改,则该数组将被修改,javascript,arrays,object,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 constr
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);
功能测试(a、b、c、d)
{
这个a=a;
这个.b=b;
这个.c=c;
这个。d=d;
}
var data0=数据=[[1,2,3,4],[5,6,7,8];
函数构造(构造函数、参数)
{
函数F(){返回构造函数.apply(this,args);}
F.prototype=constructor.prototype;
返回新的F();
}
对于(var i=0,l=data.length;iJavaScript不会在data0=data
赋值时复制数组,而是将两个变量指向内存中的同一对象。您需要实际完全克隆数组,例如:
var data0 = data.slice(0);
您正在引用相同的项目:
var data0=data=[[1,2,3,4],[5,6,7,8]];
(作为旁注-此处数据
在全局对象上结束,因为它不是真正声明的,只有data0
是)
如果要生成具有相同项的两个不同数组,可以执行以下操作:
var data0 =[[1,2,3,4],[5,6,7,8]];
var data = [];
data = data.concat(data0);
或
数据0和数据是同一个数组。使用data0=data.slice(0);
克隆您的数组不是创建单独的副本,而是创建对同一数组的单独引用。搜索网站以了解如何克隆/复制数组,您将找到答案。
data = data0.slice(0);