如何不使用loop循环,创建一个长度为100的数组,并且每个元素的值等于它的下标

直接new 一个长度为100的数组,再map的话是会返回空数组的,因为map会跳过空位。
下面介绍几种方法。

直接 map

1
'​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​'.split('').map(function (v, i) { return i; });

这个方法的''里面有100个0宽空格&#8203(<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);