0

我有一个已经用 new Array() 在对象类(又名原型)中实例化的数组,但没有数据。创建对象后,我通常会一次性定义其初始数据。有没有办法在不进行 100 行单独推送的情况下分配所有这些数据?有没有办法一次将大量数据分配给现有数组?也许是这样的:

myArray.push([1,2,3]);

我可以使用:

myArray = myArray.concat([1,2,3]);

但这会创建一个全新的数组,当我真正要做的只是为现有数组分配其初始数据时,这似乎更加昂贵和混乱。

有一个更好的方法吗?

4

3 回答 3

1

我想我不明白这个问题,但如果数组实际上是空的,你可以将值分配给旧的更改引用并让垃圾收集器删除空的:

var array = new Array()
// Later on your code
array = [1, 2, 3];

话虽如此,当您有数据要添加时,最好不要这样做并初始化您的数组。

于 2012-10-21T00:12:17.427 回答
1

在您打算将其用于某事之前,确实没有太多理由实例化一个空数组,特别是如果您稍后要加载数据。在您的示例中,您可以完全跳过初始化。

// leave it undefined initially
var array;

// set it to your values
array = [1,2,3];
于 2012-10-21T00:14:10.847 回答
1

如果我们谈论的是现有数组,您不需要多次调用.push(). 您可以在一次调用中传递多个参数。

myArray.push(1,2,3,4,5,6,7);

如果要添加的项目在不同的数组中,您可以使用.apply单独添加它们。

var itemsToAdd = [1,2,3,4,5,6,7];

myArray.push.apply(myArray, itemsToAdd);

但是对于一个的Array,可以使用文字语法同时创建和初始化,也可以将多个项目传递给 Array 构造函数。

在您的问题中,您声明 Array 在构造函数的.prototype. 正如我在上面的评论中指出的那样,这通常不是你想要的。但是如果打算在这种情况下共享,那么上面的前两个解决方案将起作用。

于 2012-10-21T00:40:48.170 回答