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)]
来实现这一目标。
【讨论】:
走向未来! 有趣的是,这个(和类似的)比(() => let n = []; for(var i=0;i<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 中声明给定类的空对象字段时会发生哪些特定于类的操作?