说起前端去重,对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
函数调用的数组
- initValue 第二个参数为可选参数,累加器的初始值。