2个数组改变而不是1

时间:2018-06-12 06:19:46

标签: javascript

我正在制作一个包含2个阵列的游戏,但是当我不想要它时,一个阵列会发生变化。浏览器中控制台的示例:

A=[1,2,3,4,5]
B=[6,7,8,9,10]
A=B
A.push(11)
A =[6, 7, 8, 9, 10, 11]
B =[6, 7, 8, 9, 10, 11]

A很好,但有办法让B留[6,7,8,9,10]

6 个答案:

答案 0 :(得分:6)

将展开式语法用作A=[...B];,将B复制到A。与A=B时一样,您实际上将B的引用设置为A,因此A的所有更改都会导致B的更改,反之亦然。

var A=[1,2,3,4,5];
var B=[6,7,8,9,10];
A=[...B];
A.push(11);
console.log(A);
console.log(B);

答案 1 :(得分:6)

当你这样做时

A=B

您正在A引用B指向的相同数组。因此,无论您使用哪个变量来查看它们所引用的数组,您都会看到对该数组所做的任何更改。

  

A很好但是有办法让B留下[6,7,8,9,10]

听起来您希望将<{1}}的内容复制B。为此,您可以使用A

slice

或者,在现代环境中,您可以使用ES2015的扩展表示法as Ankit pointed out

最初不需要为A = B.slice(); 分配任何内容,因为您从不使用它。

示例:

A
var A;
var B = [6,7,8,9,10];
A = B.slice();
A.push(11)
console.log(A); // [6, 7, 8, 9, 10, 11]
console.log(B); // [6, 7, 8, 9, 10]

答案 2 :(得分:2)

A=[1,2,3,4,5]
B=[6,7,8,9,10]

以下是将数组复制到其他

的三种方法
 A = JSON.parse(JSON.stringify(B));   

A = [].concat(B);

A= [...B];       //for ES6

A.push(11);    



/* 
A =[6, 7, 8, 9, 10, 11]
B =[6, 7, 8, 9, 10] 
*/

答案 3 :(得分:1)

GW_HWNDNEXT,您为变量A=B分配A的相同引用,这意味着任何一个变量的任何变化都会反映在另一个中,因为它们都共享相同参考

您可以使用 Spread Operator 来创建数组的副本

B

<强>捕捉

请注意,如果值是对象,则对象仍将继续共享相同的引用。

let A = [1,2,3,4,5], B = [6,7,8,9,10];
A=[...B];
A.push(11);
console.log(A); // [6,7,8,9,10, 11]
console.log(B); // [6,7,8,9,10]

答案 4 :(得分:1)

阅读上面的评论。然后:

&#13;
&#13;
var a = [1, 2, 3, 4, 5], b = [6, 7, 8, 9, 10];
a = b.slice(); a.push(11);
console.log('a', a); console.log('b', b);
&#13;
&#13;
&#13;

答案 5 :(得分:0)

通过分配A=B,两个变量都指向同一个数组,因此通过另一个变量可以看到它。如果您希望AB引用两个不同的数组,则可以复制它而不是仅仅分配。 E.g:

B = A.slice(0);