Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果另一个数组修改,则该数组将被修改_Javascript_Arrays_Object - Fatal编程技术网

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);