我正在寻找以下方法的任何替代方法,以创建包含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);
}
对我来说,我觉得应该有一种不用循环的方法。
当前回答
Fast
这个解决方案可能是最快的——它是由lodash_.range函数启发而来的(但我的更简单、更快)
设N=10,i=0,a=阵列(N);而(i<N)a[i++]=i;控制台日志(a);
与当前(2020.12.11)相比,基于while/for的现有答案的性能优势
内存在开始时由a=数组(N)分配一次使用了增加索引i++——看起来比减少索引i快30%左右——(可能是因为CPU缓存在正向上更快)
在此答案中,使用了20多种其他解决方案进行了速度测试
其他回答
简单量程发生器:
const min = 2000;
const max = 2022;
const range = Array.from({ length: max - min + 1 }, (v, k) => k + min);
console.log('range', range);
非常简单,容易生成精确的1-N
const[,…result]=数组(11).keys();console.log('结果:',结果);
试试这个
[…Array.from({length:30}).keys()]
传统浏览器友好数组构造函数
如果您想要跨浏览器友好的解决方案,您仍然无法击败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]
只是另一个ES6版本。
通过使用Array.from第二个可选参数:
Array.from(arrayLike[,mapFn[,thisArg]])
我们可以从空数组(10)位置构建编号数组:
Array.from(Array(10), (_, i) => i)
var arr=数组.来自(数组(10),(_,i)=>i);文档.写入(arr);