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 相关文章推荐
javascript来定义类的规范小结
Nov 19 Javascript
关于javascript中的typeof和instanceof介绍
Dec 04 Javascript
html超链接打开窗口大小的方法
Mar 05 Javascript
JavaScript中创建对象和继承示例解读
Feb 12 Javascript
$(document).ready(function() {})不执行初始化脚本
Jun 19 Javascript
Javascript中Date类型和Math类型详解
Feb 27 Javascript
在 Angular2 中实现自定义校验指令(确认密码)的方法
Jan 23 Javascript
JS表单数据验证的正则表达式(常用)
Feb 18 Javascript
jQuery实现动态生成表格并为行绑定单击变色动作的方法
Apr 17 jQuery
jQuery动画_动力节点节点Java学院整理
Jul 04 jQuery
详解HTML5 使用video标签实现选择摄像头功能
Oct 25 Javascript
vue watch关于对象内的属性监听
Apr 22 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
星际争霸, 教主第一视角, ZvT经典龙蛇演义
2020/03/02 星际争霸
探讨多键值cookie(php中cookie存取数组)的详解
2013/06/06 PHP
程序员的表白神器“520”大声喊出来
2016/05/20 PHP
laravel学习教程之存取器
2016/07/30 PHP
PHP经典算法集锦【经典收藏】
2016/09/14 PHP
2017年最好用的9个php开发工具推荐(超好用)
2017/10/23 PHP
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
Gambit vs ForZe BO3 第三场 2.13
2021/03/10 DOTA
Javascript中valueOf与toString区别浅析
2013/03/19 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
nodejs教程之异步I/O
2014/11/21 NodeJs
js实现select二级联动下拉菜单
2020/04/17 Javascript
javascript实现列表切换效果
2016/05/02 Javascript
Javascript 函数的四种调用模式
2016/11/05 Javascript
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
JS获取月的第几周和年的第几周实例代码
2018/12/05 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
2019/01/29 Javascript
Vue项目中使用jquery的简单方法
2019/05/16 jQuery
JS使用正则表达式提交页面验证的代码
2019/10/16 Javascript
Python中input和raw_input的一点区别
2014/10/21 Python
Python实现邮件的批量发送的示例代码
2018/01/23 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
matplotlib实现热成像图colorbar和极坐标图的方法
2018/12/13 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
2019/07/23 Python
Python字符串查找基本操作代码案例
2020/10/27 Python
详解Selenium 元素定位和WebDriver常用方法
2020/12/04 Python
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
实例教程 利用html5和css3打造一款创意404页面
2014/10/20 HTML / CSS
Deux par Deux官方网站:设计师童装
2020/01/03 全球购物
高一英语教学反思
2014/01/22 职场文书
解除劳动合同协议书范本
2014/04/14 职场文书
企业读书活动总结
2014/06/30 职场文书
含预算的公司户外活动方案
2014/08/16 职场文书
领导干部群众路线个人对照检查材料思想汇报
2014/09/30 职场文书
Mysql使用全文索引(FullText index)的实例代码
2022/04/03 MySQL
SpringBoot详解整合Redis缓存方法
2022/07/15 Java/Android