JavaScript不使用for循环,生成一个1-100的数组

习惯了使用数组的迭代方法,不考虑性能的情况下,几乎很少用到显示的 for 循环。

今天想要快速生成一个演示的数组,想着能不能通过forEach或map方法实现:

var filled = new Array(100);
filled.map(function(val, index){
  return index+1;
});

// I will get an array whose size is 100 and filled by undefined not int
console.info(filled);

失败了,结果为:(100) [empty × 100]

虽然生成了一个length为100的数组,但数组中全是空位,没有值。而在JavaScript的迭代方法中,是并不会处理空位,直接忽略。所以map方法之后得到一个长度为100,全是空位的数组。

数组迭代方法不处理空位,但是会处理undefined值,思路即是将数组中的空位转化为undefined值。

这时候你自然会想到新晋的 Array.fill() 方法,该方法可以用一个固定值填充整个数组或数组的局部。如:

Array(100).fill(undefined)

当然也可以填充为1:

Array(100).fill(1)

同样,Array.from方法会将数组的空位,转为undefined

在没有Array.fill 与Array.from 之前,可以使用Array.apply(null, Array(100)) 生成长度为100,值为undefined的数组。

所以,解决办法为:

Array(100).fill(1).map((v,k)=>k+1)

或者

var filled = Array.from(Array(100), (v,k) => k+1);
console.log(filled);

(100) [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,100]

参考资料

码中人 微信公众号