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"}]
测试结果:


原文地址:https://www.cnblogs.com/yangxunwu1992/p/4768884.html