我正在寻找以下方法的任何替代方法,以创建包含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);
}
对我来说,我觉得应该有一种不用循环的方法。
当前回答
基于高票答案和高票评论。
const range = (from, to) => [...Array(to + 1).keys()].slice(from);
// usage
let test = [];
test = range(5, 10);
console.log(test); // output: [ 5, 6, 7, 8, 9, 10 ]
其他回答
数组(…数组(9)).map((_,i)=>i);console.log(数组(…数组(9)).map((_,i)=>i))
ES5版本,效率很低,但可能是最短的一个,它是一个表达式,而不是一个变量填充有例如for循环的语句:
(Array(N)+'').split(',').map(function(d,i){return i})
传统浏览器友好数组构造函数
如果您想要跨浏览器友好的解决方案,您仍然无法击败for循环。这一行仍然适用于20多年的浏览器,包括Internet Explorer 5-11(1998年至今)。
for(var arr=[],i=0;i<10;i++){arr[i]=i+1};
alert(arr);// <<< [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
否则,这在现代HTML5浏览器中有效。。。
const arr = Array(10).fill().map((v,i)=>++i)
alert(arr);// <<< [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Array.from({ length: (stop - start) / step + 1}, (_, i) => start + (i * step));
资料来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from
我能想出的最简洁的办法是:
[...''.padEnd(N)].map((_,i)=>i+1)