JS - 数组去重

示例数组

let usageList = [ 
  { _id: 5ca4363eb4c03a02c8c311bd, user: 5ca2bc4a54bc0f2fa07b1541 },
  { _id: 5ca43645b4c03a02c8c311be, user: 5ca2bc4a54bc0f2fa07b1541 },
  { _id: 5ca4369eb4c03a02c8c311c1, user: 5c9d8cc3161d6c257c021340},
  { _id: 5ca436aeb4c03a02c8c311c3, user: 5ca2bc4a54bc0f2fa07b1541 },
  { _id: 5ca436d7b4c03a02c8c311c5, user: 5c9d8cc3161d6c257c021340 },
  { _id: 5ca43722b4c03a02c8c311c6, user: 5c9d8cc3161d6c257c021340 },
  { _id: 5ca43d697af6263868ac835e, user: 5c9d8cc3161d6c257c021340 }
]

目的:获取示例数组中的user组成的新数组,新数组中不能有重复的user。
实现代码1:

let userIds = usageList.map(usage => usage.user.toString()).filter((element, index, self) => {
    return self.indexOf(element) === index;
});

其中 usageList.map(usage => usage.user.toString()) 的执行结果如下:

[ '5ca2bc4a54bc0f2fa07b1541',
  '5ca2bc4a54bc0f2fa07b1541',
  '5c9d8cc3161d6c257c021340',
  '5ca2bc4a54bc0f2fa07b1541',
  '5c9d8cc3161d6c257c021340',
  '5c9d8cc3161d6c257c021340',
  '5c9d8cc3161d6c257c021340' ]

关键代码 filter((element, index, self) => { return self.indexOf(element) === index; }); 用于去重。去重原理为 相同的元素使用indexOf总是会返回第一个元素的位置(indeOf(): 返回数组中第一个与指定值相等的元素的索引),因此后续的重复元素位置index与indexOf返回的位置不相等,条件为false时就会被filter过滤掉,从而达到去重的目的。最终的执行结果如下:

[ '5ca2bc4a54bc0f2fa07b1541', '5c9d8cc3161d6c257c021340' ]

实现代码2:也可以使用set特性进行去重

let userIds = Array.from(
               new Set(usageList.map(usage=> usage.user.toString()))
              ).length;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值