我正在寻找以下方法的任何替代方法,以创建包含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);
}
对我来说,我觉得应该有一种不用循环的方法。
当前回答
以下函数返回一个由数字填充的数组:
var createArrayOfNumbers = function (n) {
return Array.apply(null, new Array(n)).map(function (empty, index) {
return index;
});
};
请注意,使用数组构造函数创建的数组由孔组成,因此不能使用map等数组函数遍历。因此使用Array.apply函数。
其他回答
使用ES6,您可以做到:
// `n` is the size you want to initialize your array
// `null` is what the array will be filled with (can be any other value)
Array(n).fill(null)
为了好玩,我想借鉴伊恩·亨利的答案。
当然,var array=new array(N);将为您提供大小为N的数组,但键和值将相同。。。。然后,要将数组缩短为M大小,请使用array.length=M…但对于一些添加的功能,请尝试:
function range()
{
// This function takes optional arguments:
// start, end, increment
// start may be larger or smaller than end
// Example: range(null, null, 2);
var array = []; // Create empty array
// Get arguments or set default values:
var start = (arguments[0] ? arguments[0] : 0);
var end = (arguments[1] ? arguments[1] : 9);
// If start == end return array of size 1
if (start == end) { array.push(start); return array; }
var inc = (arguments[2] ? Math.abs(arguments[2]) : 1);
inc *= (start > end ? -1 : 1); // Figure out which direction to increment.
// Loop ending condition depends on relative sizes of start and end
for (var i = start; (start < end ? i <= end : i >= end) ; i += inc)
array.push(i);
return array;
}
var foo = range(1, -100, 8.5)
for(var i=0;i<foo.length;i++){
document.write(foo[i] + ' is item: ' + (i+1) + ' of ' + foo.length + '<br/>');
}
上述输出:
1是第1项,共12项-7.5为第2项,共12项-16是第3项,共12项-24.5为第4项,共12项-33是第5项,共12项-41.5是第6项,共12项-50是第7项,共12项-58.5为第8项,共12项-67是第9项,共12项-75.5为第10项,共12项-84是第11项,共12项-92.5是第12项,共12项
jsFiddle示例
此函数使用自动生成的参数数组。
该函数创建一个数组,该数组中的值以大小增量开始,以大小增量结束,其中
range(start, end, increment);
每个值都有一个默认值,增量的符号无关紧要,因为增量的方向取决于开始和结束的相对大小。
使用ES6
const generateArray = n => [...Array(n)].map((_, index) => index + 1);
Array(8).fill(0).map(Number.call, Number)
偷取Igors数字。可以使用技巧,但使用fill()稍微缩短。仅适用于ES6及以上版本。
您可以使用此选项:
new Array(/*any number which you want*/)
.join().split(',')
.map(function(item, index){ return ++index;})
例如
new Array(10)
.join().split(',')
.map(function(item, index){ return ++index;})
将创建以下数组:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]