对象数组去重

350 阅读1分钟
  1. 简单去重,利用对象中某一个属性来实现

    let obj = {}
    let newArr = []
    const user = [
        {
            id:1,
            name:'user1'
        },
        {
            id:2,
            name:'user2'
        },
        {
            id:1,
            name:'user1'
        }
    ]
    
    for( let i = 0; i < user.length; i++) {
        // 利用obj对象快速查询,如果不存在重复就push入新数组
        if(typeof obj[user[i].id] === "undefined") {
            newArr.push(user[i])
            obj[user[i].id] = true
        }
    }
    console.log(newArr)
    

    这个方法方便快捷,缺点是没有比较对象的每个属性,但是在实际业务场景中往往只需要确定关键属性如id没有重复就行。

  2. 完全比较,比较所有键值对

    let obj = {}
    let newArr = []
    const user = [
        {
            age:20,
            name:'user1'
        },
        {
            age:21,
            name:'user2'
        },
        {
            age:20,
            name:'user1'
        },
        {
            age:20,
            name:'user3'
        }
    ]
    for( let i = 0; i < user.length; i++) {
        // 利用obj对象快速查询,如果不存在重复就push入新数组
        if(typeof obj[user[i].name] === "undefined") {
            newArr.push(user[i])
            // 将i值存入obj中,便于在下方的比较中取user的值
            obj[user[i].name] = i
        } else {
            // 如果name的值相同,再遍历对象所有的键值进行比较
          for(let key of Object.keys(user[obj[user[i].name]])) {
              // 如果键值对不一样,push入新数组
              if(user[i].key != user[obj[user[i].name]].key) {
                  newArr.push(user[i])
              }
          }
        }
    }
    console.log(newArr)
    

    网上找的方法看不懂,自己写了一个,嵌套了for循环效率可能不太高,但简单易懂