js 数组对象根据对象中的指定属性去重

参考链接:
(1)JS数组对象根据对象中的指定属性去重
https://901web.com/post/js-object-unique.html

有一个数组对象List,按需要根据某个字段去重。

const Arrlist = [{
        "id": 1,
        "gmtCreated": "2020-12-01 14:18:36",
        "gmtModified": "2020-12-08 16:35:04",
        "productCode": "HHM01",
        "insurerCode": "000183",
        "insurerName": "华海财险",
        "versionName": "华海投保",
        "versionCode": ""
    },{
        "id": 2,
        "gmtCreated": "2020-12-01 14:19:07",
        "gmtModified": "2020-12-08 16:35:05",
        "productCode": "QHM01",
        "insurerCode": "000208",
        "insurerName": "前海财险",
        "versionName": "前海投保",
        "versionCode": ""
    },{
        "id": 3,
        "gmtCreated": "2020-12-01 14:23:52",
        "gmtModified": "2020-12-08 16:35:06",
        "productCode": "AN07$2102099445",
        "insurerCode": "000179",
        "insurerName": "众安健康险",
        "versionName": "众安投保",
        "versionCode": ""
    },{
        "id": 4,
        "gmtCreated": "2020-12-02 18:51:34",
        "gmtModified": "2020-12-08 16:29:53",
        "productCode": "HHM01",
        "insurerCode": "000183",
        "insurerName": "华海财险",
        "versionName": "华海可回溯",
        "versionCode": "v2"
    },{
        "id": 5,
        "gmtCreated": "2020-12-04 17:45:00",
        "gmtModified": "2020-12-10 19:42:12",
        "productCode": "XDCM01",
        "insurerCode": "000184",
        "insurerName": "现代财月缴版",
        "versionName": "现代财投保",
        "versionCode": "v2"
    }
];
let arrayList = [{
				  id:'1',
				  name:'one'
				},{
				  id:'2',
				  name:'tow',
				},{
				  id:'3',
				  name:'three'
				},{
				  id:'1',
				  name:'one'
				},{
				  id:'2',
				  name:'tow',
				},{
				  id:'3',
				  name:'three'
				}]

list数组对象如上。

根据insurerCode,id字段进行去重。

下面列举能够实现的几种方法:
(1)方法一:循环判断

function unique(arr,u_key){
  let result = []
  result[0] = arr[0]
  arr.forEach((meta_item,i)=>{
    //声明计数变量,如果源数组中的一个对象和result结果数组中的所有对象不同,就push
    let num = 0
    result.forEach((r_item,j)=>{
      if (meta_item[u_key]!==r_item[u_key]) {
        num++
      }
      if (num === result.length) {
        result.push(meta_item)
      }
    })
  })
  return result
}

(2)方法二:利用对象属性唯一

function unique(arr, u_key) {
    const obj = {}
    const result = []
    arr.forEach(item => {
        const typeof_key = typeof item[u_key] + item[u_key]
        console.log(typeof_key);
        obj[typeof_key] = item
    })
    for (const key in obj) {
        result.push(obj[key])
    }
    return result
}

(3)方法三:利用ES6的Map方法

function unique(arr,u_key) {
      let map = new Map()
      arr.forEach((item,index)=>{
        if (!map.has(item[u_key])){
          map.set(item[u_key],item)
        }
      })
      return [...map.values()]
    }

(4)方法四:利用lodash库进行处理
如果项目中有引入lodash库的话,,就可以只用使用下面的uniqBy,传入对应的数组对象,和要根据的相关字段即可。

let unarrlist = this.$lodash.uniqBy(Arrlist,'insurerCode');
console.log(unarrlist)

let unArr = this.$lodash.uniqBy(arrayList,'id');
console.log(unArr)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值