我有一个已经在对象类(a.k.a.原型)中使用new Array()实例化的数组,但是没有数据。创建对象后,我通常会同时定义其初始数据。有没有办法在不进行100次单独推送的情况下分配所有这些数据?有没有办法一次将大量数据分配给现有阵列?也许是这样的事情:
myArray.push([1,2,3]);
我可以使用:
myArray = myArray.concat([1,2,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
上。正如我在上面的评论中所指出的,这通常不是你想要的。但是如果打算在这种情况下共享,那么上面的前两个解决方案将起作用。