我正在寻找以下方法的任何替代方法,以创建包含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 foo=Array.from(数组(N),(v,i)=>i+1);
其他回答
使用递归的ES6解决方案。不同于所有其他解决方案
const range = (n, A = []) => (n === 1) ? [n, ...A] : range(n - 1, [n, ...A]);
console.log(range(5));
所有这些都太复杂了。只要做到:
function count(num) {
var arr = [];
var i = 0;
while (num--) {
arr.push(i++);
}
return arr;
}
console.log(count(9))
//=> [ 0, 1, 2, 3, 4, 5, 6, 7, 8 ]
或者从a到b的范围
function range(a, b) {
var arr = [];
while (a < b + 1) {
arr.push(a++);
}
return arr;
}
console.log(range(4, 9))
//=> [ 4, 5, 6, 7, 8, 9 ]
function range(start, end) {
var foo = [];
for (var i = start; i <= end; i++) {
foo.push(i);
}
return foo;
}
然后由调用
var foo = range(1, 5);
在Javascript中没有内置的方法来实现这一点,但如果您需要多次执行,则可以创建一个非常有效的实用程序函数。
编辑:在我看来,以下是一个更好的范围函数。也许只是因为我对LINQ有偏见,但我认为它在更多情况下更有用。您的里程数可能有所不同。
function range(start, count) {
if(arguments.length == 1) {
count = start;
start = 0;
}
var foo = [];
for (var i = 0; i < count; i++) {
foo.push(start + i);
}
return foo;
}
我没有看到任何基于递归函数的解决方案(我自己也从未编写过递归函数),所以这里是我的尝试。
注意array.push(something)返回数组的新长度:
(a=[]).push(a.push(a.push(0))) // a = [0, 1, 2]
使用递归函数:
var a = (function f(s,e,a,n){return ((n?n:n=s)>e)?a:f(s,e,a?a:a=[],a.push(n)+s)})(start,end) // e.g., start = 1, end = 5
编辑:其他两种解决方案
var a = Object.keys(new Int8Array(6)).map(Number).slice(1)
and
var a = []
var i=setInterval(function(){a.length===5?clearInterval(i):a.push(a.length+1)})
让我们分享我的:p
Math.pow(2, 10).toString(2).split('').slice(1).map((_,j) => ++j)