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;
    },[])        

    .

  • 相关阅读:
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
  • 原文地址:https://www.cnblogs.com/xiangsj/p/9083300.html
Copyright © 2011-2022 走看看