zoukankan      html  css  js  c++  java
  • Javascript包含对象的数组去重

    Array.prototype.clearRepeat = function(){
      var result = [],
          obj = {};
     
      for(var i = 0; i < this.length; i++){
         if(typeof (this[i]) === "object"){
            var objName = "Object:";
            for(var x in this[i]){
                objName += x;
                objName += this[i][x];
            }
            if(!obj[objName]){
                obj[objName] = "new";
                result.push(this[i]);
            }
        }
        else if(!obj[typeof(this[i]) + this[i]]){
             result.push(this[i]);
             obj[typeof(this[i]) + this[i]] = "new";
         }
      }
      return result;
    }

    主要思路:
    利用Obj对象标记已储存的数组元素,当Obj内不包含此时的元素时,将这个元素Push进result数组内,同时在obj对象中标记下这个元素;

    需要注意的地方:
    普通元素在obj内可以直接按照: 对象类型 + 对象值 的方式储存,这样可以保证元素的单一性,当元素为 “5”5 时也可以被正确的
    收入,当这个元素是对象时,如果还是按照这种方式来储存obj中那么得到的是 "object[object Object]"而无法区别对象是否相等,所以这
    里先遍历对象中的属性和值,并将其作为objName当作obj中的属性名,这样就可以利用obj[objName]区分每个对象是否相等。
    测试数组:
    var
    test = [{2:"a", a:"aa"}, {2:"a", a:"aa"}, {ab:"a", a:"aa"}, {}, {}, 1,1,2,'2','2',3,4,5,{},{2:"a", a:"aa"}]
    测试结果:
    
    
    
  • 相关阅读:
    DapperExtensions 使用教程
    C#事件订阅及触发例子
    01、类与结构的区别
    内网信息搜集
    Anydesk拿下远程桌面
    C++对注册表的操作
    Linux下常见流编辑器的使用
    Typecho1.1反序列化漏洞复现
    Nmap脚本编写
    Github学习
  • 原文地址:https://www.cnblogs.com/yangxunwu1992/p/4768884.html
Copyright © 2011-2022 走看看