直接new 一个长度为100的数组,再map的话是会返回空数组的,因为map会跳过空位。
下面介绍几种方法。
直接 map
1
| ''.split('').map(function (v, i) { return i; });
|
这个方法的''
里面有100个0宽空格​
(<200b>
),所以他的length是100,这样就很好理解了。
1
| Array(100).fill('aaa').map(function (v, i) { return i; });
|
Generator
1 2 3 4 5
| function* angry(i) { yield i; if (i < 99) { yield* angry(i + 1); } }; Array.from(angry(0));
|
递归
1
| (function wallace (i) { return (i < 0) ? [] : wallace(i - 1).concat(i); })(99);
|
尾递归
1
| (function mistake (i, acc) { return (i < 100) ? mistake(i + 1, acc.concat(i)) : acc; })(0, [])
|
1 2 3 4 5 6 7 8
| Array.from( new Array(100), (_, idx) => idx ); Array.from( {length: 100}, (_, idx) => idx )
|
Y combinator
1 2 3 4 5 6 7 8 9 10 11
| (function (excited) { return function (f) { return f(f) }(function (f) { return excited(function (x) { return (f(f))(x) }) })(function (excited) { return function(i) { return (i < 0) ? [] : excited(i - 1).concat(i) } })(99)
|