zoukankan      html  css  js  c++  java
  • JS 数组中对象去重 reduce 用法

    [3,2,6].reduce.((aa, bb) => {return aa+bb}, []) // 注意传了2个参数,第一个为回调,第二个为初始值 aa

    单纯数组去重:
    let arr = new Set([1,1,3,3,'bb','bb','cc'])
    [...arr] // 打印出 1, 3, "bb", "cc"

    对于数组对象,传统的去重方法无能为力,至于forEach()、filter()等迭代方法也不好使;真正能做到优雅去重的,是ES5新增加的一个方法——reduce()

    高手给的,完美方法

    let log = console.log.bind(console);
    let person = [
         {id: 0, name: "小明"},
         {id: 1, name: "小张"},
         {id: 2, name: "小李"},
         {id: 3, name: "小孙"},
         {id: 1, name: "小周"},
         {id: 2, name: "小陈"},   
    ];
    
    let obj = {};
    
    person = person.reduce((cur,next) => {
        obj[next.id] ? "" : obj[next.id] = true && cur.push(next);
        return cur;
    },[]) //设置cur默认类型为数组,并且初始值为空的数组
    log(person);

    高手总结:https://www.cnblogs.com/caideyipi/p/7679681.html

    使用时发现开 eslint 时,上面的表达式会报错,换成以下条件即可:

    let obj = {};
    person = person.reduce((cur,next) => {
        if (!obj[next.id]) {
          obj[next.id] = true
           if (!obj[next.id]) {
            cur.push(next)
           }
        } // 不会报错,也比较好懂了 (当对象里没有所传属性时,给属性true并PUSH数组)
        return cur;
    },[])        

    .

  • 相关阅读:
    React之React.cloneElement
    HTB-靶机-Vault
    HTB-靶机-Curling
    HTB-靶机-Zipper
    HTB-靶机-Frolic
    HTB-靶机-Carrier
    HTB-靶机-Oz
    HTB-靶机-Dab
    HTB-靶机-Waldo
    HTB-靶机-Reddish
  • 原文地址:https://www.cnblogs.com/xiangsj/p/9083300.html
Copyright © 2011-2022 走看看