假设我手头有一个数字18,而不是一个包含18个元素的数组。
那么,在JS中,如果要创建一个基于数字X的功能性循环,最好的方法是什么?
我可以这样做:
[1,2,3].forEach(function(){
));
但如果我有数字3
我可以做
for(var i = 0; i < 3; i++){
}
但我希望那个循环是可运行的
假设我手头有一个数字18,而不是一个包含18个元素的数组。
那么,在JS中,如果要创建一个基于数字X的功能性循环,最好的方法是什么?
我可以这样做:
[1,2,3].forEach(function(){
));
但如果我有数字3
我可以做
for(var i = 0; i < 3; i++){
}
但我希望那个循环是可运行的
如果你有一个数字并想创建循环,那么可以在for循环的限制条件中使用该数字。
for(var i = 0; i < number; i++)
Edit 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
Array.apply(null, Array(number)).map(function () {}).forEach(...)
这是最接近的方法。 - Mattnew Array(5).forEach
不会做你想要的事情。 - user663031我不明白为什么你想这样做。
[1,2,3].forEach(function(){ ... ));
Is
var limit = n;
while (--limit) {( // Note: 0 is falsy
function(){ ... }
)(limit);}
如果你真的想使用数组结构,以下内容可以实现:
new Array(limit).fill(0).forEach(function(){...});
您可能会对当下的神话:函数式编程者不使用循环感兴趣。
.fill
是 ES6 中的新功能,因此可能尚未在所有现代浏览器上得到支持。 - Mattlimit--
。 OP 没有使用索引,但如果需要,那么 limit 递减,n-limit
递增。 - RobGArray.apply(null, Array(number)).map(function () {}).forEach(...)
虽然这是一个巧妙的技巧,但我不确定它相对于使用索引的常规 for
循环有何优势。
while(i--)...
更多;-) - RobGwhile(i--)
是一个反向线性序列 :) - Mattwhile (++i < limit) ...
或者do ... while(i++ < limit)
等方式。 - RobG
for
语句! - user663031map
或forEach
)是相同的,因此,我会说这是重复的。 - user663031