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

Javascript包含对象的数组去重的更多相关文章
- javaScript(8)---对象和数组
javaScript(8)---对象和数组 学习要点: 1.Object类型 2.Array类型 3.对象中的方法 什么是对象,其实就是一种类型,即引用类型.而对象的值就是引用类型的实例.在ECMAS ...
- javaScript遍历对象、数组总结(转载)
javaScript遍历对象.数组总结 转载来源 https://www.cnblogs.com/chenyablog/p/6477866.html 在日常工作过程中,我们对于javaScript遍 ...
- JavaScript 遍历对象、数组总结
在日常工作过程中,我们对于javaScript遍历对象.数组的操作是十分的频繁的,今天抽空把经常用到的方法小结一下,方便今后参考使用! javaScript遍历对象总结 1.使用Objec ...
- JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串;JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象
JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串:JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象
- JavaScript笔记:对象及数组
一.对象 在javascript中,对象是拥有属性和方法的一种基本数据类型 1.创建object 创建object实例有如下两种方式: 使用new操作符后跟object构造函数创建,如下代码: var ...
- javaScript遍历对象、数组总结
javaScript遍历对象总结 1.使用Object.keys()遍历 返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性). var obj = {'0':'a ...
- JavaScript 之 对象/JSON/数组
对象 简单说,所谓对象,就是一种无序的数据集合,由若干个“键值对”(key-value)构成. var obj = { p: 'Hello World' }; 上面代码中,大括号就定义了一个对象,它被 ...
- javascript多种方法实现数组去重
先说说这个实例的要求:写一个方法实现数组的去重.(要求:执行方法,传递一个数组,返回去重后的新数组,原数组不变,实现过程中只能用一层循环,双层嵌套循环也可写,只做参考): 先给初学者解释一下什么叫数组 ...
- javascript中对象和数组的异同点
一.JS声明对象或数组 JS对象:{ } JS数组:[ ] 对象 var b={m:'123',n:'abc'};alert(b.m);alert(b.n); 一维数组 var a=[1,2,3];a ...
随机推荐
- shell text process code
shell 命令处理文本: 1. 批量处理该目录下的文件,ls | while read l ; do echo $l ; done > b.txt 2. 批量处理文件的每一行 , cut - ...
- Apache Nutch v2.3 发布,Java实现的网络爬虫
http://www.oschina.net/news/59287/apache-nutch-2-3 Apache Nutch v2.3已经发布了,建议所有使用2.X系列的用户和开发人员升级到这个版本 ...
- IOS中在自定义控件(非视图控制器)的视图跳转中 代理方法与代码块的比较
//代码块与代替代理的设计方法 我就以在自定义视图中(非视图控制器,不能实现视图控制功能),通过代理和代码块两种方法分别实现视图的跳转,进行对比 首先自定义了一个视图,上面有一个已经注册了得BUtto ...
- MySQL学习笔记——安装及配置环境
1.安装的版本为mysql-5.6.24-win32.1432006610压缩版 查看教程http://jingyan.baidu.com/article/f3ad7d0ffc061a09c3345b ...
- 国内GIT托管服务
http://www.cnblogs.com/TianFang/p/3348949.html
- UnExpected Error, Quitting
UnExpected Error, Quitting VB在win7 环境安装后,启动vb6.0弹出以上英文提示,目前解决方法: 下载动态库,放置于C:\ProgramFiles\Common Fil ...
- MySQL编译安装错误:No curses/termcap library found的解决方法
CentOS编译安装MySQL,./coonfigure时出现错误: checking for termcap functions library... configure: error: No cu ...
- Spring MVC启动过程
org.springframework.web.context.ContextLoaderListener ContextLoaderListener的作用就是启动Web容器时,自动装配Applica ...
- win8.1企业版 IIS8.5 安装php5.5.18详细图文
最近为了做测试需要在电脑上安装php 环境如下 系统 win8.1 企业版 IIS 8.5 PHP:5.5.18 php-5.5.18-nts-Win32-VC11-x64 完整文件名 注意IIS 下 ...
- DNS域传送漏洞利用
DNS区域传送(DNS zone transfer)指的是一台备用服务器使用来自主服务器的数据刷新自己的域(zone)数据库.这为运行中的DNS服务提供了一定的冗余度,其目的是为了防止主的域名服务器因 ...