【问题标题】:functional loop given a number instead of an array [duplicate]给定数字而不是数组的功能循环[重复]
【发布时间】:2016-09-14 09:00:02
【问题描述】:

假设我手头有一个数字 18,而不是一个数组。

在给定数字 X 而不是 X 元素数组的情况下,在 JS 中创建 函数式 循环的最佳方法是什么?

我可以这样做:

[1,2,3].forEach(function(){

));

但如果我有数字 3

我可以的

for(var i = 0; i < 3; i++){

}

但我希望该循环能够正常运行

【问题讨论】:

  • 我们已经改变了过去的函数式风格,现在正在使用生成器。回到for 声明!
  • @torazaburo,我不确定他是否问了与您将其标记为重复的相同的问题,因为我认为他只是想迭代 x 次而不创建数组或使用 for 循环。也许不确定。
  • 类似JSBIN
  • 以“函数方式”迭代 n 次,就所有实际目的而言,与创建一个包含 n 个数字的数组然后使用诸如 @ 之类的迭代类型函数是相同的结果是 987654325@ 或 forEach,所以是的,我会说它是重复的。

标签: javascript node.js


【解决方案1】:

如果你有一个数字并且你想创建一个循环,那么你可以在 for 循环中使用限制条件中的数字。

for(var i = 0; i &lt; number; i++)

编辑 1:您只能在数组上使用 foreach,在这种情况下,由于您已经有一个数字,您可以创建一个该长度的数组,然后在其上使用 foreach。

var foo = new Array(number).fill(0);

foo.foreach()

另外一个选择是

var N = 18;

Array.apply(null, {length: N}).map(Number.call, Number)

结果 [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]

此线程Create a JavaScript array containing 1...N提供更多选项

【讨论】:

  • 是的,但我正在寻找一个 functional for 循环等 :)
  • @AlexMills,意思是forEach 风格的电话?
  • @AlexMills 你所说的功能性for循环是什么意思?我以前从未听说过.. 可能有一些链接会有所帮助
  • Array.apply(null, Array(number)).map(function () {}).forEach(...) 大约是你能得到的最接近的值。
  • 实际上,new Array(5).forEach 不会做你想做的事。
【解决方案2】:

我不明白你为什么要这样做。相当于:

[1,2,3].forEach(function(){ ... ));

    var limit = n;
    while (--limit) {  // note: 0 is falsy

    (function(){


      })(limit);
   }

或者如果你真的想使用数组结构:

new Array(limit).fill(0).forEach(function(){...});

会的。

您可能对Myth of the Day: Functional Programmers Don't Use Loops 感兴趣。

【讨论】:

  • 请注意,.fill 是 ES6 的新成员,因此可能尚未在所有现代浏览器上得到支持。
  • 因为我需要将索引的值传递给函数
  • 我认为是限制——不是——限制
【解决方案3】:

根据this question,您可以使用以下方法相对轻松地“功能地”迭代线性序列:

Array.apply(null, Array(number)).map(function () {}).forEach(...)

不确定这与带有索引的常规 for-loop 相比有什么优势,尽管这是一个巧妙的技巧。

【讨论】:

  • 我认为优点是它的代码比while(i--)... 多得多;-)
  • 公平地说,while(i--) 是一个反向线性序列:)
  • 如果索引很重要(并且它不在 OP 中)然后while (++i &lt; limit) ...do ... while(i++ &lt; limit) 等等。
  • 这很公平。我认为在这一点上我们有点过时了。
  • 索引在 OP 中很重要 :)
猜你喜欢
  • 2016-03-28
  • 1970-01-01
  • 2016-05-30
  • 1970-01-01
  • 2014-07-27
  • 2016-01-17
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
相关资源
最近更新 更多