javascript创建给定大小的空数组


Answers:


67
var arr = new Array(5);
console.log(arr.length) // 5

14
OP问in javascript how would I create an empty array of a given size。这样就解决了这个问题。
mariocatch '16

12
OP提供了“空”的示例。
RobG '16

6
好吧,这是问题的另一个选择。他们可以选择提供的任何答案,这就是stackoverflow的荣耀:)
mariocatch '16

235

1)要创建无法迭代的新数组,可以使用数组构造函数:

Array(100) 要么 new Array(100)


2)您可以创建新的数组,可以像下面这样迭代

a)所有JavaScript版本

  • Array.apply: Array.apply(null, Array(100))

b)从ES6 JavaScript版本开始

  • 解构运算符: [...Array(100)]
  • Array.prototype.fill Array(100).fill(undefined)
  • Array.from Array.from({ length: 100 })

您可以像下面那样映射这些数组。

  • Array(4).fill(null).map((u, i) => i) [0,1,2,3]

  • [...Array(4)].map((u, i) => i) [0,1,2,3]

  • Array.apply(null, Array(4)).map((u, i) => i) [0,1,2,3]

  • Array.from({ length: 4 }).map((u, i) => i) [0,1,2,3]


1
Array.prototype.fill(> = ES6)kangax.github.io/compat-table/es6/… ;
ptim

4
今天的启示-当您在(A)部分中提到使用构造函数语法新创建的数组甚至不可迭代时。Javascript有时确实会令人惊讶。
RBT

什么是大小Array(10000)empty x 10000
Qwerty

1
它的长度是10000,您可以通过检查它,console.log(Array(10000).length)但是如果运行Array(10000).forEach((u, i) => console.log(i)),您将没有输出
stpoa

Array.apply('x', Array(10))实际上是[undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]
Polv

44

我们Array.from({length: 500})从2017年开始使用。


@ gion_13:我看到它被赞成,我的被反对。原因?
7vujy0f0hy18年

@ 7vujy0f0hy我不知道你为什么被拒绝。我给您投了赞成票,尽管您的解决方案不如此解决方案直观。
gion_13 '18

@ gion_13:感谢您确认我的解决方案nothing没问题。
7vujy0f0hy

17

尝试使用while循环,Array.prototype.push()

var myArray = [], X = 3;
while (myArray.length < X) {
  myArray.push("")
}

或者,使用 Array.prototype.fill()

var myArray = Array(3).fill("");

.fill()是一种优雅的单缸解决方案。谢谢!
colefner '19

15

[...Array(500)]为此,我们将从2018年开始使用。


1
走向未来!
李维

可笑的是,(和类似的)速度比慢50%(() => { let n = []; for(var i=0;i<500;i++){y.push("");} return n; })()
Alex

那种过早优化的脚步,也许如果您打算创建一堆包含数以千万计的元素的数组,您可能需要考虑一下,但是在大多数情况下,只有几纳秒的时间,这将不值得一读。
JaredMcAteer

10

从ES5开始(给出此答案时):

如果您想要一个空undefined元素数组,则只需

var whatever = new Array(5);

这会给你

[undefined, undefined, undefined, undefined, undefined]

然后,如果您希望将其填充为空字符串,则可以执行

whatever.fill('');

这会给你

["", "", "", "", ""]

如果您想在一行中执行此操作:

var whatever = Array(5).fill('');

1
新的Array(2)不会给您[undefined,undefined]。它为您提供了一个不可迭代的数组。
JCF

好。还有其他我不明白的事情。我正在创建一个新数组,new Array(2)而我得到的[ <2 empty items> ]不是[undefined, undefined].map在前者上使用无效。但是,我可以使用for...of循环对其进行迭代。如果使用文字符号创建新数组,a = [undefined, undefined]则可以.map在其上使用。
JCF

1
@JCF for ... of使用迭代器协议,因此其行为与forEach / map不同。迭代器
释放

@TomaszBłachut@JCF对于反对投票的人,请记住,这个答案是4年前给出的–当时,这个答案是100%有效的。ES6和ES7分别直到2016年中和2018年中才开始向浏览器推出。在回答此问题时,JS版本应该是ES5。如果您需要进一步证明这ES5的工作方式,只需启动一个旧版的Chrome(在回答此问题时,它应该是v48)并运行Array(5)。您将看到以下输出:[undefined x 5]
jeffdill2

@ jeffdill2最好在答案本身中添加新信息。评论并不总是完整阅读。
波阿斯

4

如果要使用一些值创建匿名数组,则可以使用此语法。

var arr = new Array(50).fill().map((d,i)=>++i)
console.log(arr)


0

您可以同时使用javascript方法repeat()和split()。

" ".repeat(10).split(" ")

此代码将创建一个包含10个项目的数组,每个项目都是空字符串。

const items = " ".repeat(10).split(" ")

document.getElementById("context").innerHTML = items.map((item, index) => index)

console.log("items: ", items)
<pre id="context">

</pre>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.