1、前言
代码评审中,看到新人写的生成1-100的数组,for循环,醉了。代码如下啊:
let rst = []
for (let i = 1;i <= 100; i++) {
rst.push(i)
}
// 得到 rst=>[1,2,3,...,100]
2、重写
const rst = Array.from({ length: 100 }, (o, i) => i + 1)
// 或者
const rst2 = Array.from({ length: 100 }, (...args) => args[1] + 1)
3、函数封装
/*
* desc: 生成1-N的数值数组(1~length数组)
* {Number} length:数组的长度
*/
const genOneToNArr = (length) => Array.from({ length }, (o, i) => i + 1)
// 或者
const genOneToNArr2 = (length) => Array.from({ length }, (...args) => args[1] + 1)
const rst = genOneToNArr(100)
// 得到 rst=>[1,2,3,...,100]
4、Array.from()可以生成各式各样的数值型数组
/*
* desc: 生成min~max的数值数组,包括min、max
*/
const genM2NArr = (min, max) => Array.from({ length: max - min + 1 }, (o, i) => i + min)
// genM2NArr(10, 15)=> [10, 11, 12, 13, 14, 15]
/*
* desc: 生成min~max的数值数组,步长为step,包括min,尽量包括max
*/
const genM2NStepArr = (min, max, step = 1) => Array.from({ length: ~~((max - min + 1) / step) }, (o, i) => i * step + min)
// genM2NStepArr(10, 15, 2)=> [10, 12, 14]
/*
* desc: 生成一个min-max的随机数
* {Number} length:数组的长度
*/
const genOneRandom = (min, max) => Math.random() * (max - min) + min
// genOneRandom(10, 20)=> 18.500574779399862
/*
* desc: 生成length个min-max的随机数
* {Number} length:数组的长度
*/
const genM2NRandomArr = (min, max, length = 1) => Array.from({ length }, () => Math.random() * (max - min) + min)
/*
* desc: 生成1-99层楼房,元素为{name:'1楼',value:1}形式
*/
const floorArr = Array.from({ length: 99 }, (o, i) => ({
name: i + 1 + '楼',
value: i + 1
}))
