我正在寻找以下方法的任何替代方法,以创建包含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);
}
对我来说,我觉得应该有一种不用循环的方法。
当前回答
有一个小功能,它允许使用像[1,2]。范围(3,4)->[1,2,3,4]也适用于负参数。享受
Array.prototype.range = function(from, to)
{
var range = (!to)? from : Math.abs(to - from) + 1, increase = from < to;
var tmp = Array.apply(this, {"length": range}).map(function()
{
return (increase)?from++ : from--;
}, Number);
return this.concat(tmp);
};
其他回答
只是另一个ES6版本。
通过使用Array.from第二个可选参数:
Array.from(arrayLike[,mapFn[,thisArg]])
我们可以从空数组(10)位置构建编号数组:
Array.from(Array(10), (_, i) => i)
var arr=数组.来自(数组(10),(_,i)=>i);文档.写入(arr);
在ES6中,使用Array from()和key()方法。
Array.from(Array(10).keys())
//=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
使用排列运算符的较短版本。
[...Array(10).keys()]
//=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
从1开始,将map函数传递给Array from(),对象具有长度属性:
Array.from({length: 10}, (_, i) => i + 1)
//=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
如果我得到了你想要的,你需要一个数字数组1..n,以后可以循环使用。
如果这就是你所需要的,你能代替它吗?
var foo = new Array(45); // create an empty array with length 45
然后当你想使用它时…(例如,未优化)
for(var i = 0; i < foo.length; i++){
document.write('Item: ' + (i + 1) + ' of ' + foo.length + '<br/>');
}
例如,如果你不需要在数组中存储任何东西,你只需要一个长度合适的容器,你可以遍历它。。。这可能更容易。
请在此处查看实际操作:http://jsfiddle.net/3kcvm/
数组(…数组(9)).map((_,i)=>i);console.log(数组(…数组(9)).map((_,i)=>i))
让我们分享我的:p
Math.pow(2, 10).toString(2).split('').slice(1).map((_,j) => ++j)