• 你会用es6,倒是用啊


    一、关于取值的吐槽

      取值在程序中非常常见,比如从对象obj中取值

    const obj={
      a:1,
      b:2,  
    c:3
    }
    吐槽:
    const a= obj.a
    const b=obj.b
    const c=obj.c
    或者
    const f=obj.a+obj.b;
    const g=obj.c+obj.e;
    改进:
    const {a,b,c,d,e}=obj;
    const f=a+b;
    const g=c+e;
    
    如果向创建的变量名和对象属性不一致,可以这样写
    const {a:a1}=obj;
    console.log(a1)

    补充

    es6的解构赋值虽然好用。但是要注意解构的对象不能为undefined、null。否则会报错,因此需要给解构的对象一个默认值。

    const {a,b,c,d}=obj||{}

    二、关于合并数组的吐槽

    比如合并两个数组,合并两个对象

    const a=[1,34,3,5];const b=[1,5,6];const c=a.concat(b)

    const obj1={a:1};const obj2={b:2};

    const obj3=object.assign({},obj1,obj2);

    吐槽:es6扩展运算符是不是忘了,还有数组的合并不考虑去重吗?

    改进:

    const a=[1,2,3,4];

    const b=[1,5,6];

    const c=[..new Set([...a,...b])];

    三、关于if中判断条件的吐槽

    if(type==a||type==1||type==6){...}

    吐槽:es6中数组实例方法includes会不会用呢?

    改进:const condition=[1,2,3,4,5,6];

    if(condition.includes(type)){........}

    四、关于列表搜索吐槽

    const a = [1,2,3,4,5];
    const result = a.find(
    item =>{
    return item === 3
    }
    );console.log(result)
    // 3,返回满足条件的对应元素find()

    const a = [1,2,3,4,5];
    const result = a.filter(
    item =>{
    return item === 3

    }

    );console.log(result)
    // [3],返回一个数组,数组中的值为满足条件的对应元素

    五、关于扁平化数组的需求

    一个部门json数据中,属性名是部门的id,属性值是部门成员id数组集合,现要把部门的成员id都提取到一个数组集合中。

    const deps = {
    '采购部':[1,2,3],
    '人事部':[5,8,12],
    '行政部':[5,14,79],
    '运输部':[3,64,105],
    }
    let member = [];
    for (let item in deps){
        const value = deps[item];
        if(Array.isArray(value)){
            member = [...member,...value]
        }
    }
    member = [...new Set(member)];console.log(member)
    //(10) [1, 2, 3, 5, 8, 12, 14, 79, 64, 105]

     吐槽获取对象的全部属性值好要遍历吗?Object.values忘记了吗?还有涉及到数组的扁平化处理,为啥不用提供flat方法呢,还好这个数组的深度只有2维,要是遇到4维、5维的深度,是不是要循环嵌套来扁平化?

    const deps = {
        '采购部':[1,2,3],
        '人事部':[5,8,12],
        '行政部':[5,14,79],
        '运输部':[3,64,105],
    }
    let member=Object.values(deps).flat(Infinity);
    //es2019中的新功能flat(),flat()方法会递归到指定深度将所有子数组连接,并返回一个新数组。flat函数接收一个参数,参数值为要展开数组的维度,infinity展开所有嵌套数组
    //arr.flat()方法可以移除数组中的空项。

    六、关于获取对象属性值的吐槽

    const name=obj&&obj.name;

    改进:es6中的可选链操作符会使用吗?

    const name=obj?.name;

    七、关于添加对象属性的吐槽

    当给对象加属性时,如果属性时动态变化的,该怎么处理。

    let obj={};let index=1;let key = `topic${index}`;

    obj[key]='话题内容';

    let obj={};
    let index1;
    obj[`topic${index}`]='话题内容'

    八、关于输入框非空的判断

    在处理输入框相关业务时,往往会判断输入框为输入值的场景

    if(value !== null && value !== undefined && value !== ''){
    //...
    }

    吐槽:es6中空寂合并运算符了解过吗

    if((value??'') !== ''){
    //...
    }

    九、关于异步函数的吐槽

    const fn1 = () =>{
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve(1);
        }, 300);
      });
    }
    const fn2 = () =>{
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve(2);
        }, 600);
      });
    }
    const fn = () =>{
       fn1().then(res1 =>{
          console.log(res1);// 1
          fn2().then(res2 =>{
            console.log(res2)
          })
       })
    }

    吐槽:如果这样调用异步函数,不怕形成地域回调啊!

    const fn = async () =>{
      const res1 = await fn1();
      const res2 = await fn2();
      console.log(res1);// 1
      console.log(res2);// 2
    }
    //但是要做并发请求时,还是要用到paromise.all().
    const fn=()=>{
     promise.all([fn1(),fn2()]).then(res=>{
         console.log(res);
    })
    }
    //如果并发请求时,只要其中一个异步函数处理完成,就返回结果,要用到Promise.race()。
  • 相关阅读:
    ZedGrapy使用实例
    C#分割字符串(包括使用字符串分割)
    从VS2005项目转换为VS2008项目(C#版)
    关于SQL操作的一些经验
    android socket 编程总结
    Excel绘制人口金字塔图
    使用命令让IE全屏显示指定的页面,适用于触摸屏终端机
    毕业这两年
    使用XML数据结合XSLT导出Excel
    XSLT实现XML作为数据源在web页面显示人口金字塔统计图
  • 原文地址:https://www.cnblogs.com/qiaozhiming123/p/15852895.html
Copyright © 2020-2023  润新知