Javascript 中仅用一行代码生成 `[0, 1, ..., N-1]` 数列

Posted by cl9000 on June 01, 2020

人生不是一种享乐,而是一桩十分沉重的工作。 ——<列夫·托尔斯泰>

使用下面一行代码,我们就可以生成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-1A[x] = undefined)
  • F = (val,index)=>indexfunction 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
2
3
Array.apply(null, {length: N}).map(function(value, index){
return index + 1;
});
方法2 可改为:
1
Array.from(new Array(N),(val,index)=>index+1);

参考

a
关注【公众号】,了解更多。



支付宝打赏 微信打赏

赞赏一下 坚持原创技术分享,您的支持将鼓励我继续创作!