zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Ozone数据探查服务的增量数据更新机制
    HDFS的块Topology位置重分布
    聊聊更为高效的ACL认证方式
    YARN Federation的架构设计
    Confluence 6 用户宏示例
    Confluence 6 用户宏示例
    Confluence 6 用户宏示例
    Confluence 6 用户宏最佳实践
    Confluence 6 编辑和删除用户宏
    Confluence 6 创建一个用户宏
  • 原文地址:https://www.cnblogs.com/lalalagq/p/10286871.html
Copyright © 2011-2022 走看看