在已经在Javascript中实例化后,定义Array的初始数据的最佳方法是什么?

时间:2012-10-21 00:01:26

标签: javascript arrays

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

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

我可以使用:

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

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

有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

// leave it undefined initially
var array;

// set it to your values
array = [1,2,3];

答案 2 :(得分: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);

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

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