人生不是一种享乐,而是一桩十分沉重的工作。 ——<列夫·托尔斯泰>
使用下面一行代码,我们就可以生成0…(N-1)数列。
开始
方法1 (需要 ES5)
1 | Array.apply(null, {length: N}).map(Function.call, Number); |
简要说明
Array.apply(null, {length: N})
返回一个由undefined
填充的长度为N的数组(例如A = [undefined, undefined, ...])
。A.map(Function.call, Number)
返回一个长度为N的数组,它的索引为I的元素为Function.call.call(Number, undefined, I, A)
的结果。Function.call.call(Number, undefined, I, A)
可转化为Number(I)
,正好就是I。- 结果为:
[0, 1, ..., N-1]
。
更全面的介绍,请看这里.
https://github.com/gromgit/jstips-xe/blob/master/tips/33.md
方法2 (需要 ES6)
这里用到了 Array.from https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/from
1 | Array.from(new Array(N),(val,index)=>index); |
简要说明
A = new Array(N)
返回一个有N
个_小孔_的数组 (例如A = [,,,...]
, 但是对于x in 0...N-1
时A[x] = undefined)
。F = (val,index)=>index
即function F (val, index) { return index; }
。Array.from(A, F)
返回一个长度为N的数组,它的索引为I
的元素为F(A[I], I)
的结果,也就是I
。- 结果为:
[0, 1, ..., N-1]
。
其它
如果你需要 [1, 2, …, N]
序列,
方法1 可改为:
1 | Array.apply(null, {length: N}).map(function(value, index){ |
方法2 可改为:
1 | Array.from(new Array(N),(val,index)=>index+1); |
参考
a
关注【公众号】,了解更多。
赞赏一下 坚持原创技术分享,您的支持将鼓励我继续创作!