一.去重前后数据对比

  1. // 原数据是这样的 // 去重后数据是这样的
  2. [{ [{
  3. "goodsId": "1", "goodsId": "1",
  4. "quota": 12, "quota": 12,
  5. "skuId": "1" "skuId": "1"
  6. }, },
  7. { {
  8. "goodsId": "2", "goodsId": "2",
  9. "quota": 12, "quota": 12,
  10. "skuId": "2" "skuId": "2"
  11. }, }]
  12. {
  13. "goodsId": "1",
  14. "quota": 12,
  15. "skuId": "1"
  16. }]

二.使用方法

  1. 使用filter和Map 🌟🌟🌟🌟🌟
  2. 使用reduce 🌟🌟🌟🌟
  3. for循环 🌟🌟🌟

结论:filter和Reduce时间上差别不是太大,filter稍微更快一些,但是filter语法更简洁

1.使用filter和Map

代码简洁,好用,4行代码搞定,平均耗费时间最短,五星推荐

  1. function uniqueFunc(arr, uniId){
  2. // 创建一个map
  3. const res = new Map();
  4. // 如果 res 有对应的 key 就返回
  5. return arr.filter((item) => !res.has(item[uniId]) && res.set(item[uniId], 1));
  6. }

2.使用reduce

代码稍多,平均耗费时间和第一不分伯仲,四星推荐

  1. function uniqueFunc2(arr, uniId){
  2. let hash = {}
  3. return arr.reduce((accum,item) => {
  4. //
  5. hash[item[uniId]] ? '' : hash[item[uniId]] = true && accum.push(item)
  6. return accum
  7. },[])
  8. }

3.使用for循环

耗费时间较一二稍多,但是耗费时间平均,三星推荐

  1. function uniqueFunc3(arr, uniId){
  2. let obj = {}
  3. let tempArr = []
  4. for(var i = 0; i<arr.length; i++){
  5. if(!obj[arr[i][uniId]]){
  6. tempArr.push(arr[i])
  7. obj[arr[i][uniId]] = true
  8. }
  9. }
  10. return tempArr
  11. }

作者:光年之外_宇
链接:https://juejin.cn/post/6984625612937773070
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。