前端对象数组去重reduce

作者: 我才不要你管呐 | 来源:发表于2020-04-14 19:10 被阅读0次

    说起前端去重,对es6比较熟悉的就会想到 set 方法

    set去重方法

    let arr = [1,2,2,3,5,3,6,5]
    let arrSet = Array.from(new Set(arr))// Array.from将Set结构转换成数组
    console.log(arrSet) // [1,2,3,5,6]
    

    可以看到,set方法去重只能针对普通的数组进行去重。当需求是对一个对象数组去重时,至今为止我找到的最好的办法就是用reduce.

    使用方法

    let result = [{"text":"55 法务类","value":"55"},
                  {"text":"63 成本类","value":"63"},
                  {"text":"63 成本类","value":"63"},
                  {"text":"64 财务类","value":"64"},
                  {"text":"67 战投类","value":"67"}]
    let obj = {}
    result = result.reduce((cur, next) => {
        //当对象里没有所传属性时,给属性true并PUSH数组
        obj[next.value] ? '' : (obj[next.value] = true && cur.push(next))
        return cur
    }, [])
    // 这里得到的result就是我们想要的
    [{"text":"55 法务类","value":"55"},
     {"text":"63 成本类","value":"63"},
     {"text":"64 财务类","value":"64"},
     {"text":"67 战投类","value":"67"}]
    

    关于reduce

    完整的reduce方法

    array.reduce(function(accumulator, currentValue, currentIndex, array), initialValue)
    

    reduce有两个参数

    1.第一个是函数,必须有返回值,函数有四个参数,分别为

    accumulator 累加器,即函数上一次调用的返回值。第一次的时候为 initialValue || arr[0]
    currentValue 数组中函数正在处理的的值。第一次的时候initialValue || arr[1]
    currentIndex 数组中函数正在处理的的索引
    array 函数调用的数组

    1. initValue 第二个参数为可选参数,累加器的初始值。

    相关文章

      网友评论

        本文标题:前端对象数组去重reduce

        本文链接:https://www.haomeiwen.com/subject/fgfxvhtx.html