前端对象数组去重reduce

说起前端去重,对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)