我不能复制这个数组。

16

我无法复制该数组。

var Mycollection = new Array("James", "John", "Mary");
var Mycollection2 = Mycollection;

第一个数组中的任何更改也会在第二个数组中体现。

Mycollection.pop();
console.log(Mycollection.toString()) // ["James", "John"]
console.log(Mycollection2.toString())// ["James", "John"]

然而,当我使用文本类型的变量时,这种情况就不会发生。

4个回答

5

数组是对象,不同于像字符串、整数等基本类型...接受对象的变量对应于对象的引用(指针),而不是对象本身,因此不同的变量可以引用同一个对象。基本类型(字符串、整数等)的变量与值相关联。

在您的情况下,您将不得不克隆您的对象数组以获得相同的值。

var Mycollection = new Array("James", "John", "Mary");
var Mycollection2 = Mycollection.slice();

2
JavaScript传递数组是通过引用的方式,要想得到独立的数组,请使用以下方法:
var Mycollection = new Array("James", "John", "Mary");
var Mycollection2 = Mycollection.slice();

2

实际上,您的代码中正在复制一个引用。

var Mycollection = new Array("James", "John", "Mary");
var Mycollection2 = Mycollection; // Makes both Mycollection2 and Mycollection refer to the same array.

使用Array.slice()方法可以创建数组的部分或全部副本。
var Mycollection1 = new Array("James", "John", "Mary");
var Mycollection2 = Mycollection.slice();

Mycollection1.pop();
console.log(Mycollection1.toString()) // ["James", "John"]
console.log(Mycollection2.toString()) // ["James", "John", "Mary"]

DEMO


1

只需使用:

var Mycollection2 = Mycollection.slice(0);

复制数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接