js 数组内的对象去重

4,008 阅读1分钟

最近的开发中,一直有用到这个需求,但是需要使用的时候,都是靠百度的,觉得自己可能平时用的比较多,所以今天可能特意写一下,方便以后自己使用 首先我们说一下,我所谓的这个对象去重,是对象中的某一项相等即为重复,当然下面我也会写一下真正的对象去重

  1. 双循环
let arr = [
    {
        name: 'zhangsan',
        age: 14
    },
    {
        name: 'lisi',
        age: 14
    }
]
let arr2 = []
for(let i = 0; i < arr.length; i++) {
    if (i === 0) {
        arr2.push(arr[i])
    } else {
        arr2.forEach(item => {
            if(item.age !== arr[i].age) {
                arr2.push(arr[i])
            }
        })
    }
}

  1. for循环

通过借助一个辅助对象来实现

let arr = [
    {
        name: 'zhangsan',
        age: 14
    },
    {
        name: 'lisi',
        age: 14
    }
]
var result = []
let obj = {}
for(let i = 0; i < arr.length; i++) {
    if(!obj[arr[i].age]){
        result.push(arr[i]);
        obj[arr[i].age] = true;
    }
}
console.log(result)
  1. reduce
let arr2 = [
    {
        name: 'zhangsna',
        age: 14
    },
    {
        name: 'lisi',
        age: 14
    }
]
let arr3 = {} // 辅助数组
let arr4 = arr2.reduce((sum, current) => {
    if (!arr3[current.age]) { // 判断当前age是否已经在arr3里面
        // 如果不在
        arr3[current.age] = true // 则将当前age值设置true(可以是其他的)
        sum.push(current) // 然后push进当前数组
    }
    return sum
}, [])
console.log(arr4)
  1. 真正的js数组去重
let arr6 = [
    {
        name: 'zhangsna',
        age: 14
    },
    {
        name: 'zhangsna',
        age: 14
    }
]
let arr7 = {}
let arr5 = arr6.reduce((sum, current) => {
    if (!arr7[JSON.stringify(current)]) {
        arr7[JSON.stringify(current)] = true
        sum.push(current)
    }
    return sum
}, [])