js实现数组去重、判断数组以及对象中的内容是否相同


Posted in Javascript onNovember 29, 2013
/* 
*数组元素去重 
*/ 
if(typeof Array.prototype.distinct != "function"){ 
Array.prototype.distinct = function(){ 
this.sort(); 
for(var i=0;i<this.length-1;i++){ 
if($.isPlainObject(this[i]) && $.isPlainObject(this[i+1])){ 
if(o2o(this[i],this[i+1])){ 
this.splice(i,1); 
} 
}else if($.isArray(this[i]) && $.isArray(this[i+1])){ 
if(a2a(this[i],this[i+1])){ 
this.splice(i,1); 
} 
}else if(this[i]===this[i+1]){ 
this.splice(i,1); 
} 
} 
} 
} 
/* 
*比较对象是否相同 
*/ 
function o2o(o1,o2){ 
if(!($.isPlainObject(o1) && $.isPlainObject(o2))){ 
return false; 
} var k1k2=[],k1 =[],k2=[]; 
$.each(o1,function(k,v){ 
k1.push(k); 
}); 
$.each(o2,function(k,v){ 
k2.push(k); 
}); 
if(k1.length != k2.length){ 
return false; 
} 
k1k2 = k1; 
k1k2 = k1k2.concat(k2); 
k1k2.distinct(); 
if(k1.length != k1k2.length || k2.length != k1k2.length){ 
return false; 
} 
var flag=true; 
$.each(k1k2,function(i,v){ 
var v1= o1[v]; 
var v2 =o2[v]; 
if(typeof v1 != typeof v2){ 
flag= false; 
}else{ 
if($.isPlainObject(v1) && $.isPlainObject(v2)){//recursion 
flag = o2o(v1,v2); 
if(!flag){ 
return false; 
} 
}else if($.isArray(v1) && $.isArray(v2)){ 
flag = a2a(v1,v2); 
if(!flag){ 
return false; 
} 
}else{ 
if(v1 !== v2){ 
flag= false; 
} 
} 
} 
}); 
return flag; 
} 
/* 
*比较数组是否完全相同 
*/ 
function a2a(a1,a2){ 
if(!($.isArray(a1) && $.isArray(a2))){ 
return false; 
} 
if(a1.length != a2.length){ 
return false; 
} 
a1.sort(); 
a2.sort(); 
for(var i=0;i<a1.length;i++){ 
if(typeof a1[i] != typeof a2[i]){ 
return false; 
} 
if($.isPlainObject(a1[i]) && $.isPlainObject(a2[i])){ 
var retVal = o2o(a1[i],a2[i]); 
if(!retVal){ 
return false; 
} 
}else if($.isArray(a1[i]) && $.isArray(a2[i]) ){//recursion 
if(!a2a(a1[i],a2[i])){ 
return false; 
} 
}else if(a1[i] !== a2[i]){ 
return false; 
} 
} 
return true; 
}
Javascript 相关文章推荐
js异步加载的三种解决方案
Mar 04 Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
Nov 21 Javascript
js+html5获取用户地理位置信息并在Google地图上显示的方法
Jun 05 Javascript
javascript图片预加载完整实例
Dec 10 Javascript
JS Ajax请求如何防止重复提交
Jun 13 Javascript
JavaScript中利用构造器函数模拟类的方法
Feb 16 Javascript
Angularjs 实现动态添加控件功能
May 25 Javascript
vue2.x+webpack快速搭建前端项目框架详解
Nov 30 Javascript
详解Vue之父子组件传值
Apr 01 Javascript
详解基于Vue的支持数据双向绑定的select组件
Sep 02 Javascript
vue+elementui 对话框取消 表单验证重置示例
Oct 29 Javascript
JavaScript代码简化技巧实例解析
Sep 09 Javascript
jquery限定文本框只能输入数字即整数和小数
Nov 29 #Javascript
js中事件的处理与浏览器对象示例介绍
Nov 29 #Javascript
js实现的折叠导航示例
Nov 29 #Javascript
javascript特殊用法示例介绍
Nov 29 #Javascript
jquery和ajax的关系详细介绍
Nov 29 #Javascript
js操作table示例(个人心得)
Nov 29 #Javascript
css配合jquery美化 select
Nov 29 #Javascript
You might like
学习使用PHP数组
2006/10/09 PHP
修改PHP的memory_limit限制的方法分享
2012/02/21 PHP
php生成随机数的三种方法
2014/09/10 PHP
PHP7原生MySQL数据库操作实现代码
2020/07/03 PHP
动态加载iframe
2006/06/16 Javascript
一个选择最快的服务器转向代码
2009/04/27 Javascript
JavaScript toFixed() 方法
2010/04/15 Javascript
JQuery上传插件Uploadify使用详解及错误处理
2010/04/27 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
使用原生js写的一个简单slider
2014/04/29 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
2014/07/23 Javascript
JavaScript错误处理
2015/02/03 Javascript
JavaScript中的Math.atan2()方法使用详解
2015/06/15 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
2015/10/09 Javascript
JS响应鼠标点击实现两个滑块区间拖动效果
2015/10/26 Javascript
基于Jquery代码实现手风琴菜单
2015/11/19 Javascript
jQuery EasyUI中DataGird动态生成列的方法
2016/04/05 Javascript
bootstrap table动态加载数据示例代码
2017/03/25 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
Vue 动态设置路由参数的案例分析
2018/04/24 Javascript
Vue仿支付宝支付功能
2018/05/25 Javascript
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
2019/01/24 Javascript
vue 设置 input 为不可以编辑的实现方法
2019/09/19 Javascript
15 分钟掌握vue-next响应式原理
2019/10/13 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
2020/05/28 Javascript
Python 错误和异常小结
2013/10/09 Python
Python通过RabbitMQ服务器实现交换机功能的实例教程
2016/06/29 Python
python pygame实现五子棋小游戏
2020/10/26 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
2019/08/08 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
2020/01/14 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
物业前台接待岗位职责
2015/04/03 职场文书
大学生十八大感想
2015/08/11 职场文书
晶体管单管来复再生式收音机
2021/04/22 无线电