我不能复制数组

时间:2014-02-21 13:20:43

标签: javascript arrays web

我无法复制数组。

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

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

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

但是,当我使用文本类型

的变量时,不会发生这种情况

4 个答案:

答案 0 :(得分:5)

数组是对象,不像string,int等原始类型...... 获取对象的变量对应于对象的引用(指针), 而不是对象本身,所以不同的变量可以引用同一个对象。 基本类型的变量(字符串,整数等)与值相关联。

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

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

答案 1 :(得分:2)

Javascript通过引用传递数组,以使单独的数组执行:

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

答案 2 :(得分:1)

只需使用:

var Mycollection2 = Mycollection.slice(0);

复制数组

答案 3 :(得分:1)

您实际上是在代码中复制引用,

var Mycollection = new Array("James","Jonh","Mary");
var Mycollection2 = Mycollection; // makes both Mycollection2 and Mycollection referring  to same array.

使用Array.slice()方法创建部分/全部数组的副本。

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

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

DEMO