【技巧】还在for循环生成数组?Array.from教你做人!

3,745 阅读1分钟

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
}))

Array.from()使用