创建此数组的最明智的方法是:
var x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20];
例如,for循环:
for
var x = []; for (var i=1;i<=20;i++) { x.push(i); }
或while循环:
while
var x = [], i = 1, endInt = 20; while (i <= endInt) { x.push(i); i++; }
还会有其他示例更短些吗?换句话说,就是更少的代码?我正在考虑像Ruby这样的事情,我认为等效的代码将和一样简单1..20。我不了解JavaScript中的语法,但是我想知道是否有较短的方法可以完成相同的操作。
1..20
更新: 我不是想删除分号或var问题中的答案,但我必须承认这个问题暗示着这一点。我对算法比对减少字节数更好奇。对不起,如果我不清楚!而且,将其变成一个函数非常简单,只需将function range(start, end) { /* guts here */ }它拍一下就可以了。问题是对“胆量”是否有新颖的方法。
var
function range(start, end) { /* guts here */ }
经过一番思考,这是range(N)我可以想到的JavaScript中标准函数的最短实现:
range(N)
function range1(i){return i?range1(i-1).concat(i):[]}
注意 :请勿在生产中使用;是O(N ^ 2)
与当前最受好评的答案相反:
function range1(i){var x=[];var i=1;while(x.push(i++)<i){};return x}
例:
> range1(5) [1, 2, 3, 4, 5]
这就像要递归的发贴子一样,尽管我原本希望在我想到三元陈述之前,它会更长一些,从而将其减少到42个必需的字符。
请注意,range可以通过执行编写返回[start,end)的“标准” 函数.concat(i-1)。
range
.concat(i-1)
更新:哦,我发现了一个令人难以置信的简短版本,它通过滥用for循环,反向排序,赋值返回一个值的事实:丑陋的命令语法:for(y=[],i=20;y[--i]=i;){}仅包含25个字符(尽管您希望将var y其插入到for循环中,如果不想0 … 19,则+1)。虽然不需要定义一个函数,它并不短,但是比i?r(i-1).concat(i):[]不需要创建一个函数,它要短。
for(y=[],i=20;y[--i]=i;){}
var y
i?r(i-1).concat(i):[]
2015年9月13日更新:
刚刚想出了这种新方法,该方法可用于支持ES6标准的浏览器:
> Array(5).fill().map((x,i)=>i) [0, 1, 2, 3, 4]
还有这个:
> Array.from(Array(5),(x,i)=>i) [0, 1, 2, 3, 4]
添加了一些性能分析测试用例:看来,除了标准的有序for循环以外,其他所有东西的速度至少要慢10倍,至少在V8上是如此。https://jsperf.com/array- range-in-javascript (当然,如果您始终以函数样式进行编程,并且无论如何都会通过函数调用击中每个元素,那么这无关紧要。)