美文网首页
js 对象数组排序+去重问题

js 对象数组排序+去重问题

作者: 好多柱 | 来源:发表于2021-06-29 15:15 被阅读0次
    一组数据:
    [
      {
        name: '玉骨遥寒薇结海报',
        created_at: '2021-06-04 04:54:06.164',
      },
      {
        name: '玉骨遥寒薇结海报',
        created_at: '2021-06-04 04:52:49.753',
      },
      {
        name: '玉骨遥寒薇结海报',
        created_at: '2021-06-04 05:02:02.398',
      },
      {
        name: '公交车抛锚警民携手推车为考生开路',
        created_at: '2021-06-04 04:52:40.588',
      },
      {
        name: '公交车抛锚警民携手推车为考生开路',
        created_at: '2021-06-04 05:07:21.587',
      },
    ]
    1.去除name相同的对象
    2.且保留的是创建时间最早的对象
    

    解决方法:

      arr.sort (( n , m )=> n.created_at > m.created_at ?1:-1).reduce (( s , v )=>{
            var itemIdx =s.findIndex(v1=>v1.name ==v.name)
            if ( itemIdx ==-1){
              s.push ( v )
            }
            return s },[])
    

    数组去重有效的方法:

    1.简单数组 利用ES6 Set去重(ES6中最常用)
    function unique (arr) {
      return Array.from(new Set(arr))  //from() 方法用于通过拥有 length 属性的对象或可迭代的对象来返回一个数组。
     // 或者 [...new Set(arr)]
    }
    2.利用for嵌套for,然后splice去重(ES5中最常用)
    function unique(arr){            
            for(let i=0; i<arr.length; i++){
                for(let j=i+1; j<arr.length; j++){
                    if(arr[i].id===arr[j].id){         //第一个数id等于第二个数id,splice方法删除第二个
                        arr.splice(j,1);
                        j--;
                    }
                }
            }
    return arr;
    }
    3.利用reduce+findIndex
     function unique(arr) {
          return arr.reduce((prev,cur)=>
              prev.findIndex(v1=>v1.name==cur.name) ==-1 ? [...prev, cur] : prev
          ,[])
        }
    4.filter+findIndex
     function unique(arr) {
         return arr.filter((item,index)=>{
            return arr.findIndex(it=>it.name == item.name) ===index
          })
        }
    
    

    js如何去除一个数组中与另一个数组中的值相同的元素

    法1:双层for循环
    function array_diff(a, b) {
          for (var i = 0; i < b.length; i++) {
            for (var j = 0; j < a.length; j++) {
              if (a[j].name == b[i].name) {
                a.splice(j, 1)
                j = j - 1
              }
            }
          }
          return a
        }
    法2:数组方法
    function array_diff(a, b) {
      return a.filter(ee=>b.findIndex(v1=>v1.name==ee.name) === -1)
    }
    

    相关文章

      网友评论

          本文标题:js 对象数组排序+去重问题

          本文链接:https://www.haomeiwen.com/subject/osmhultx.html