• JS数组去重


    数组去重方法

    简单数组去重:

    
        {
          const a = [1, 3, 4, 1, 5, 2, 6, 7, 8, 3]
          const b = a.filter((item, index, self) => self.indexOf(item) === index)
          console.log(b) //[1, 3, 4, 5, 2, 6, 7, 8]
        }
    

    实例1根据indexOf去重,indexOf的好处就是返回的是首次出现的位置,这样后面即使出现的值一样,也只能返回第一次出现的索引,当然这个只适用于简单的数组

    对象数组去重:

    
         const objArr = [{
            name: '名称1'
          },{
            name: '名称2'
          },{
            name: '名称3'
          },{
            name: '名称1'
          },{
            name: '名称2'
          }]
    
          const obj = {}
          const newObjArr = []
          for(let i = 0; i < objArr.length; i++){
             if(!obj[objArr[i].name]){
              newObjArr.push(objArr[i]);
              obj[objArr[i].name] = true
             }
          }
    
          console.log(newObjArr)
    

    结果为:

    
         [{
            name: '名称1'
          },{
            name: '名称2'
          },{
            name: '名称3'
          }]
    

    还可以用reduce来处理,如下:

    
        const objArr = [{
            name: '名称1'
          },{
            name: '名称2'
          },{
            name: '名称3'
          },{
            name: '名称1'
          },{
            name: '名称2'
          }]
          const obj = {}
          const newObjArr =  objArr.reduce((prev, curr)=>{
            obj[curr.name] ? true : obj[curr.name] = true && prev.push(curr);
            return prev
          }, [])
          console.log(newObjArr)
    

    结果为:

    
         [{
            name: '名称1'
          },{
            name: '名称2'
          },{
            name: '名称3'
          }]
    

    两个数组之间去重:

    
       var arr3 = [{
            id: 1,
            name: 'lily'
        }, {
            id: 2,
            name: 'hz'
        }, {
            id: 3,
            name: '123'
        }, {
            id: 4,
            name: '321'
        }, {
            id: 5,
            name: 'aa'
        }]
    
        var other = [{
            id: 1,
            name: 'lily'
        }, {
            id: 2,
            name: 'hz'
        }]
    
        isOther = (x, arr) =>{
          for(var i = 0;i<arr.length;i++){
             if(x === arr[i].id){
               return true;
             }
          }
    
          return false;
        }
    
        console.log(arr3.filter((item)=>!isOther(item.id, other)));
    

    结果为:

    
       [{
            id: 3,
            name: '123'
        }, {
            id: 4,
            name: '321'
        }, {
            id: 5,
            name: 'aa'
        }]
    

    上面例子中,在数组arr3去除掉跟数组isOther中相同的元素,把不存在在isOther数组中的元素筛选出来

    来源:https://segmentfault.com/a/1190000017931539

  • 相关阅读:
    汇编学习--第十天
    linux(03)基础系统优化
    linux(02)基础shell命令
    lf 前后端分离 (6) 支付
    lf 前后端分离 (5) 优惠券
    lf 前后端分离 (4) 价格策略
    lf 前后端分离 (3) 中间建跨域
    lf 前后端分离 (2) 课程数据获取,Serializer的返回
    lf 前后端分离 (1) auth,token认证
    支付宝接口调用总结(1)
  • 原文地址:https://www.cnblogs.com/lalalagq/p/10286871.html
Copyright © 2020-2023  润新知