• 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"}]
    测试结果:
    
    
    
  • 相关阅读:
    Django + Uwsgi + Nginx 的概念
    ubantu+nginx+uwsgi+django部署
    FileZilla以root用户登录Linux
    全文检索django-haystack+jieba+whoosh
    七牛云上传视频
    JWT登录与多方式登录
    vue绑定用户页面
    绑定微博用户接口
    vue微博回调空页面
    微博回调接口
  • 原文地址:https://www.cnblogs.com/yangxunwu1992/p/4768884.html
Copyright © 2020-2023  润新知