简单化Javascript数组问题
为什么a=[“a”,“b”,“c”,“d”]?,在做b=a时如何避免这种交叉引用;我想要两个独立的对象,独立的简单化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”]和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] ); }