数组去重是开发过程中经常遇到的问题,对于普通类型可能new Set[...array]就可以实现,对于数组元素是对象的去重可能无能为力,这里介绍一种方法,使用数组的reduce()方法。
假设一个数组:
arr = [
{city: 'beijing'},
{city: 'shanghai'},
{city: 'shenzhen'},
{city: 'shanghai'},
{city: 'guangzhou'},
{city: 'beijing'},
]
这里有一个数组,数组的每一项都是一个对象,要求是去除重复的对象
代码:
let obj = {}
arr.reduce((cur, next) => {
obj[next['city']] ? ' ' : obj[next['city']] = true && cur.push(next)
return cur
}, [])
代码分析:
第一次:cur = [], next = {city: 'beijing'} 得到 obj[ 'beijing'] = true, cur = [{city: 'beijing'}]
第二次: cur = [{city: 'beijing'}] , next ={city: 'shanghai'} 得到 obj[ 'shanghai'] = true, cur = [{city: 'beijing'}, {city: 'shanghai'}]
第三次: cur = [{city: 'beijing'}, {city: 'shanghai'}] , next ={city: 'shenzhen'} 得到 obj[ 'shenzhen'] = true, cur = [{city: 'beijing'}, {city: 'shanghai'},{city: 'shenzhen'}]
第四次: cur = [{city: 'beijing'}, {city: 'shanghai'},{city: 'shenzhen'}] , next ={city: 'shanghai'} , 由于 obj[ 'shanghai'] = true已经存在, cur = [{city: 'beijing'}, {city: 'shanghai'},{city: 'shenzhen'}]
第五次: cur = [{city: 'beijing'}, {city: 'shanghai'},{city: 'shenzhen'}] , next ={city: 'guangzhou'} 得到 obj[ 'guangzhou'] = true, cur = [{city: 'beijing'}, {city: 'shanghai'},{city: 'shenzhen'},{city: 'guangzhou'}]
第六次: cur = [{city: 'beijing'}, {city: 'shanghai'},{city: 'shenzhen'},{city: 'guangzhou'}] , next ={city: 'beijing'} ,由于 obj[ 'beijing'] = true已经存在, cur = [{city: 'beijing'}, {city: 'shanghai'},{city: 'shenzhen'},{city: 'guangzhou'}]并返回最终结果