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

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

伪代码:

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

输出:

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

【问题讨论】:

标签: javascript


【解决方案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提供了一个“空”的例子。
  • 嗯,这是问题的另一种选择。他们可以选择提供的任何答案,这就是 stackoverflow 的荣耀:)
【解决方案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>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      • 1970-01-01
      • 2019-01-16
      • 2020-08-03
      • 1970-01-01
      相关资源
      最近更新 更多