Javascript包含对象的数组去重
2015-08-29 12:27
549 查看
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"}] 测试结果:
相关文章推荐
- 配置JSP的默认首页
- 使用Jsoup消除不受信任的HTML (来防止XSS攻击)
- JavaScript中函数函数的定义与变量的声明<基础知识一>
- js 验证身份证格式
- html中使用JavaScript动态添加按钮及其响应函数
- javascript再探
- 一些前台密码验证JS
- JavaScript学习笔记1
- 解决JSON序列化日期格式问题
- jsp过滤器
- js实现栈
- js中数组迭代函数—(2)会生成新数组
- js中数组迭代函数—(1)不生成新数组
- js实现列表类
- js中数字类型数组排序
- JavaScript中字符串处理的一些函数
- js精美的幻灯片画集特效代码分享
- js实现基于正则表达式的轻量提示插件
- JS实现md5.js、md4.js、sha1.js 加密算法使用
- JavaScript中__proto__与prototype的关系