javascript 创建给定大小的空数组

Posted

技术标签:

【中文标题】javascript 创建给定大小的空数组【英文标题】:javascript create empty array of a given size 【发布时间】:2016-04-28 12:01:28 【问题描述】:

javascript中如何创建一个给定大小的空数组

伪代码:

X = 3;
createarray(myarray, X, "");

输出:

   myarray = ["","",""]

【问题讨论】:

你可能会使用Array.prototype.fill default array values的可能重复 相关帖子here. 【参考方案1】:

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]

【讨论】:

Array.prototype.fill (>=ES6) kangax.github.io/compat-table/es6/…; 一天的启示——当您在 (A) 部分中提到使用构造函数语法新创建的数组甚至不可迭代时。 Javascript 有时确实令人惊讶。 Array(10000)empty x 10000 的大小是多少? 它的长度是10000,你可以通过console.log(Array(10000).length)查看,但是如果你运行Array(10000).forEach((u, i) => console.log(i)),你将没有输出 Array.apply('x', Array(10)) 实际上是[undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]【参考方案2】:
var arr = new Array(5);
console.log(arr.length) // 5

【讨论】:

OP 询问了in javascript how would I create an empty array of a given size。这解决了这个问题。 OP提供了一个“空”的例子。 嗯,这是问题的另一种选择。他们可以选择提供的任何答案,这就是 *** 的荣耀:)【参考方案3】:

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

【讨论】:

@gion_13:我看到它被投赞成票,mine 被投反对票。原因? @7vujy0f0hy 我不知道你为什么投了反对票。我投了你一票,尽管你的解决方案不如这个直观。 @gion_13:感谢您确认我的解决方案没有问题☺。【参考方案4】:

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

如果你想要一个空的 undefined 元素数组,你可以这样做

var whatever = new Array(5);

这会给你

[undefined, undefined, undefined, undefined, undefined]

在较新的版本中,现在提供

[empty × 5]

请参阅this other question 了解空和未定义的区别。

如果你想让它用空字符串填充,你可以这样做

whatever.fill('');

这会给你

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

如果你想在一行中完成:

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

【讨论】:

new Array(2) 不会给你 [未定义,未定义]。它为您提供了一个不可迭代的数组。 好的。还有其他事情我不明白。我正在使用new Array(2) 创建一个新数组,我得到的是[ <2 empty items> ] 而不是[undefined, undefined]。在前者上使用.map 无效。但是,我可以使用 for...of 循环对其进行迭代。如果我使用文字符号 a = [undefined, undefined] 创建一个新数组,那么我可以在其上使用 .map @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 最好在答案本身中添加新信息。 cmets 并不总是被完全读取。【参考方案5】:

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

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

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

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

【讨论】:

.fill() 是一种优雅的单线解决方案。谢谢!【参考方案6】:

在 2018 年及以后,我们将使用 [...Array(500)] 来实现这一目标。

【讨论】:

走向未来! 有趣的是,这个(和类似的)比 (() =&gt; let n = []; for(var i=0;i&lt;500;i++)y.push(""); return n; )() 慢了 50%。 这有点过早优化的味道,也许如果您打算创建一堆包含数千万个元素的数组,您可能需要考虑它,但在大多数情况下,几纳秒不是让它值得阅读。【参考方案7】:

如果你想创建带有一些值的匿名数组,那么你可以使用这种语法。

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

【讨论】:

【参考方案8】:

你可以同时使用两个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>

【讨论】:

以上是关于javascript 创建给定大小的空数组的主要内容,如果未能解决你的问题,请参考以下文章

如果有的话,在 java 中声明给定类的空对象字段时会发生哪些特定于类的操作?

哪些语言标准允许忽略固定大小数组上的空终止符?

创建具有构造函数中给定大小的数组

如何在 Python 中获取任意大小的空列表?

0129 JavaScript 数组:概念创建数组获取数组中的元素

JavaScript-----14.内置对象 Array()和String()