2个数组改变而不是1

i h*_*ion 5 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]
Run Code Online (Sandbox Code Playgroud)

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

Ank*_*wal 6

使用扩展语法A=[...B];复制BA.当你这样做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);
Run Code Online (Sandbox Code Playgroud)


T.J*_*der 6

当你这样做

A=B
Run Code Online (Sandbox Code Playgroud)

你让A同一个阵列B指向.因此,无论您使用哪个变量来查看它们所引用的数组,您都会看到对该数组所做的任何更改.

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

这听起来像你想复制的内容BA.为此,您可以使用slice:

A = B.slice();
Run Code Online (Sandbox Code Playgroud)

或者,在现代环境中,您可以像Ankit所指出的那样使用ES2015的扩展符号.

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]
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper {
  max-height: 100% !important;
}
Run Code Online (Sandbox Code Playgroud)