JS实现数组、对象去重的几种常用方式

一、数组去重

1、ES6--Set方法数组去重

function uniq(arr){
  var a=new Set(arr);
  var b=[...a];
    return b
}

var aa=[1,2,2,2,3,3,3,4,4,5,6,7,7,8,8];

var bb=uniq(aa);

//输出结果

Array(8) [ 1, 2, 3, 4, 5, 6, 7, 8 ]

2、利用对象做第二个容器(与第一个对象去重大致相同)

function uniq(arr){
    var res = [];
    var obj = {};
    for(var i=0; i<arr.length; i++){
        if (!obj[arr[i]]) {
            obj[arr[i]] = 1;
            res.push(arr[i])
        }
    }
    return res;
}

var cc=[1,2,3,3,3,4,5,5,66,7,7,8,9,9];

dd=uniq(cc);

//输出结果
Array(9) [ 1, 2, 3, 4, 5, 66, 7, 8, 9 ]

3、indexOf  /  includes 方法 去重

function uniq(arr){
    var temp = []; //一个新的临时数组
    for(var i = 0; i < arr.length; i++){
        if(temp.indexOf(arr[i]) == -1){   //也可以使用ES6中的  includes -- 替换indexOf
            temp.push(arr[i]);
        }
    }
    return temp;
}

var aa=[1,1,2,3,3,4,5,5,'hello','hello','hell','well'];

cc=uniq(aa);

//输出结果
Array(8) [ 1, 2, 3, 4, 5, "hello", "hell", "well" ]

 

二、对象去重  (操作环境为浏览器--F12--控制台--复制代码回车即可实现)

1、利用对象访问属性的方法,判断对象中是否存在 key (key 指代关键字段,用作识别是重复一的字段)

var list=[ {
          id: 132,
          rank: "1",
          rankUpdateDate: "2019-12-30 10:13:44",
          uid: 65,
          nickName: "Tan1sALuckyBoy",
          mobile: null,
          number: 7,
        },
        {
          id: 131,
          rank: "2",
          rankUpdateDate: "2019-12-27 17:09:14",
          uid: 65,
          nickName: "Tan1sALuckyBoy",
          mobile: null,
          number: 6,
        },
        {
          id: 127,
          rank: "3",
          rankUpdateDate: "2019-12-27 00:00:00",
          uid: 143,
          nickName: "客茧87334u",
          mobile: null,
          number: 2,
        },
        {
          id: 126,
          rank: "4",
          rankUpdateDate: "2019-12-27 00:00:00",
          uid: 122,
          nickName: "night-cat",
          mobile: null,
          number: 2,
        },
        {
          id: 130,
          rank: "5",
          rankUpdateDate: "2019-12-27 14:10:45",
          uid: 65,
          nickName: "Tan1sALuckyBoy",
          mobile: null,
          number: 2,
        },
        {
          id: 130,
          rank: "5",
          rankUpdateDate: "2019-12-27 14:10:45",
          uid: 65,
          nickName: "Tan1sALuckyBoy",
          mobile: null,
          number: 2,
        },
        {
          id: 130,
          rank: "5",
          rankUpdateDate: "2019-12-27 14:10:45",
          uid: 65,
          nickName: "Tan1sALuckyBoy",
          mobile: null,
          number: 2,
        }]

var arr = list;
      var list2 = [];
      var obj = {};
      for (var i = 0; i < arr.length; i++) {
        if (!obj[arr[i].uid]) {
          list2.push(arr[i]);
          obj[arr[i].uid] = true;
        }
      }
      console.log(JSON.stringify(list2));

 

 

2、利用reduce方法遍历数组,reduce第一个参数是遍历需要执行的函数,第二个参数是item的初始值

(list在最上面创建了)

var arr = list;
      var obj = {};
      var list2 = [];
      list2 = arr.reduce(function(item, next) {
        obj[next.uid] ? "" : (obj[next.uid] = true && item.push(next));
        return item;
      }, []);
      console.log(JSON.stringify(list2));

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值