Array Constructor
您首先要接触的可能是 Array() 构造函数。与直觉相反,这可能是单独使用时最有问题的选项。虽然它适用于任意数量的参数来创建具有给定值的数组,但它在其他地方几乎都存在不足。它的大多数问题源于填充结果数组的漏洞或“空”值以及如何在其他地方处理这些值。
Array.from( )
Array.from() 是一个静态方法,它从类似数组或可迭代的对象创建新的浅复制 Array 实例。它对于转换类似数组的对象(例如 arguments 、 NodeList )或可迭代对象(例如 Set 、 Map 、 Generator )到实际数组中。除此之外,通过传递具有 length 属性的对象,可以很容易地“欺骗”它创建给定长度的数组。这有点慢,但效果很好,并且避免了 Array() 构造函数的一些问题。此外,它允许您传递映射函数作为第二个参数,这对于使用值初始化数组非常有用。
Array.prototype.fill( )
虽然 Array.from() 非常灵活,但使用映射函数用相同的值填充它并不是特别有效。Array.prototype.fill() 允许您使用相同的值填充现有数组,从而填补了这一空白。这也可以与 Array() 构造函数结合使用,因为它允许您用值填充数组,而不是空槽。
**Array.prototype.map( )
**
Array.from() 允许通过第二个参数实现映射函数,但很多人认为它很难阅读。此外,还有一些边缘情况,在映射期间访问数组本身可能很有用。Array.prototype.map() 为您提供了一点额外的灵活性和可读性(如果这是您所关心的)。它还能够完成您可能需要的几乎所有其他操作,但请记住,它不适用于空值。
About 性能
如果此类操作在您的应用程序中非常常见,则性能可能是一个问题,但总的来说,这些选项都不是特别慢。Array() 构造函数似乎是最快的。话虽这么说,如果与 Array.prototype.fill() 结合使用,它可能是用单个值初始化数组的最佳选择。奇怪的是,即使您随后链接 Array.prototype.map() 调用来创建动态值,这种性能优势仍然存在。因此,我个人的建议如下: