Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.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 - Fatal编程技术网

简单化Javascript数组问题

简单化Javascript数组问题,javascript,arrays,Javascript,Arrays,为什么a=[“a”,“b”,“c”,“d”]?,在做b=a时如何避免这种交叉引用;我想要两个独立的对象,独立的 最后,a=[“a”,“b”,“c”]和b=[“a”,“b”,“c”,“d”]因为变量引用对象,所以它们不会复制它们 你可以用 var a = [], b = []; a.push('a'); a.push('b'); a.push('c'); b = a; b.push('d'); console.log(a); 因为赋值不复制变量内容。(见相关问题。) 对于阵列,您可以使用conc

为什么a=[“a”,“b”,“c”,“d”]?,在做b=a时如何避免这种交叉引用;我想要两个独立的对象,独立的


最后,a=[“a”,“b”,“c”]和b=[“a”,“b”,“c”,“d”]

因为变量引用对象,所以它们不会复制它们

你可以用

var a = [], b = [];
a.push('a');
a.push('b');
a.push('c');
b = a;
b.push('d');
console.log(a);

因为赋值不复制变量内容。(见相关问题。)

对于阵列,您可以使用
concat
创建(粗略地)复制的阵列:

var a = [], b = [];
a.push('a');
a.push('b');
a.push('c');
b = a.slice();
b.push('d');
console.log(a);

。。。或者
切片
,正如其他答案所说。

当你把a分配给b时,你实际上是在给a分配一个引用。因此,对b的任何更改也会影响a。要做您真正想做的事情,请尝试:

a = [1,2,3]
b = [].concat(a)
b.push(4)

它将实际复制JS数组中的。

也是对象(数组中的
对象的实例),因此JS中的此类对象是通过引用而不是通过值分配的,因此当您这样做时:

b = [].concat(a);
b
现在通过引用
a
分配,因此它将影响
a
数组

要做你想做的事,你可以做:

b = a
以下是一个例子:

b = a.slice();
结果:

var a = [], b = [];
a.push('a');
a.push('b');
a.push('c');
b = a.slice();
b.push('d');
console.log(a);

一旦执行
b=a
操作,
a
b
都指向内存中的同一数组;您需要将元素分别推送到
a
b
,或者,一旦将元素推送到
a
,您就可以在其中循环并将其推送到
b
,例如

[a, b, c]
for(vari=0;i
您需要克隆阵列以拥有单独的对象
for ( var i = 0; i < a.length; i++ ){ b.push( a[i] ); }