我正在寻找以下方法的任何替代方法,以创建包含1到N的JavaScript数组,其中N仅在运行时已知。
var foo = [];
for (var i = 1; i <= N; i++) {
foo.push(i);
}
对我来说,我觉得应该有一种不用循环的方法。
我正在寻找以下方法的任何替代方法,以创建包含1到N的JavaScript数组,其中N仅在运行时已知。
var foo = [];
for (var i = 1; i <= N; i++) {
foo.push(i);
}
对我来说,我觉得应该有一种不用循环的方法。
当前回答
您可以使用Es6中的阵列填充和映射;就像一些人在回答这个问题时建议的那样。以下是一些示例:
Example-One: Array(10).fill(0).map((e,i)=>i+1)
Result-One: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Example-Two: Array(100/10).fill(0).map((e,i)=>(i*10)+10)
Result-Two:[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
我更喜欢这样,因为我觉得这很简单。
其他回答
如果您碰巧像我一样在应用程序中使用d3.js,d3会提供一个助手函数来为您执行此操作。
因此,要获得从0到4的数组,非常简单:
d3.range(5)
[0, 1, 2, 3, 4]
并获得从1到5的数组,如您所请求的:
d3.range(1, 5+1)
[1, 2, 3, 4, 5]
查看本教程了解更多信息。
使用ES6标准中的新Array方法和=>函数语法(编写时仅限Firefox)。
通过用未定义的:
Array(N).fill().map((_, i) => i + 1);
Array.from将“孔”转换为未定义,因此Array.map按预期工作:
Array.from(Array(5)).map((_, i) => i + 1)
在ES6中,您可以执行以下操作:
数组(N).fill().map((e,i)=>i+1);
http://jsbin.com/molabiluwa/edit?js安慰
编辑:更新问题后,将数组(45)更改为数组(N)。
控制台日志(数组(45).填充(0).映射((e,i)=>i+1));
对于小范围,切片是不错的。N仅在运行时已知,因此:
[0, 1, 2, 3, 4, 5].slice(0, N+1)
使用非常流行的Undercore_.range方法
// _.range([start], stop, [step])
_.range(10); // => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
_.range(1, 11); // => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
_.range(0, 30, 5); // => [0, 5, 10, 15, 20, 25]
_.range(0, -10, -1); // => [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
_.range(0); // => []