zoukankan      html  css  js  c++  java
  • 复杂数组去重

    遇到复杂数组去重问题

    之前一直使用的

    this.list = [...new Set(this.list)]

    不管用了,具体原因,待解。

    发现一个很好用的方法

    一,适用于对整个复杂对象进行对比去重

    
    
    // 复杂数组去重
    removeDuplicates(arr){
      let obj = {}
      return arr.filter((item, index) => {
        // 防止key重复
        let newItem = item + JSON.stringify(item)
        return obj.hasOwnProperty(newItem) ? false : obj[newItem] = true
      })
    },
    知识点:
    hasOwnProperty:判断 obj中有无newItem这个属性。
    返回值为布尔值。
    只能找到自身属性,继承属性为false
    需要注意一点,js并没有保护hasOwnProperty。意味着如果提前把hasOwnProperty值设为false或true
    得到的结论并不准确。如果担心这种情况,1.可以直接使用原型链上真正的 hasOwnProperty 方法
    2.使用另一个对象的`hasOwnProperty` 并且call
    ({}).hasOwnProperty.call(foo, 'bar'); // true
    3.也可以使用 Object 原型上的 hasOwnProperty 属性
    Object.prototype.hasOwnProperty.call(foo, 'bar'); // true

    let arr = [1,2,3,4,4,1] 
    let newArr = arr.reduce((pre,cur)=>{
    if(!pre.includes(cur)){
    return pre.concat(cur)
    }else{
    return pre
    }
    },[])
    console.log(newArr);

    此方法不适于复杂对象,includes不能适用对象

    二,适用于对对象中某一项进行对比去重(比如 id)

    function unique(arr){            
            for(var i=0; i<arr.length; i++){
                for(var j=i+1; j<arr.length; j++){
                    if(arr[i]==arr[j]){         //第一个等同于第二个,splice方法删除第二个
                        arr.splice(j,1);
                        j--;
                    }
                }
            }
    return arr;
    }
    let person = [
         {id: 0, name: "小明"},
         {id: 1, name: "小张"},
         {id: 2, name: "小李"},
         {id: 3, name: "小孙"},
         {id: 1, name: "小周"},
         {id: 2, name: "小陈"},  
    ];
     
    let obj = {};
     
    let peon = person.reduce((cur,next) => {
        obj[next.id] ? "" : obj[next.id] = true && cur.push(next);
        return cur;
    },[]) //设置cur默认类型为数组,并且初始值为空的数组
    console.log(peon);

     
  • 相关阅读:
    “嫦娥一号”探月卫星成功发射
    优化SQL Server数据库查询(转)
    虚拟网络连接设置
    字符串分割自定义函数(SQL)
    做程序的劫客
    Linux学习笔记12我的第一个C程序
    C#学习笔记——25个经典问题
    C#学习笔记——回调机制
    C#学习笔记——TCP通讯
    halcon学习笔记——实例篇(2)长度和角度测量
  • 原文地址:https://www.cnblogs.com/dandanyajin/p/13985072.html
Copyright © 2011-2022 走看看