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 相关文章推荐
StringTemplate遇见jQuery冲突的解决方法
Sep 22 Javascript
JQuery与JS里submit()的区别示例介绍
Feb 17 Javascript
关于jQuery中的each方法(jQuery到底干了什么)
Mar 05 Javascript
javascript页面上使用动态时间具体实现
Mar 18 Javascript
当达到输入长度时表单自动切换焦点
Apr 06 Javascript
node.js中使用socket.io的方法
Dec 15 Javascript
高效的jquery数字滚动特效
Dec 17 Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
Oct 10 Javascript
React组件之间的通信的实例代码
Jun 27 Javascript
详解如何让Express支持async/await
Oct 09 Javascript
原生js实现获取form表单数据代码实例
Mar 27 Javascript
深入分析JavaScript 事件循环(Event Loop)
Jun 19 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
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
十天学会php之第十天
2006/10/09 PHP
杏林同学录(四)
2006/10/09 PHP
PHP 数组基础知识小结
2010/08/20 PHP
php从数组中随机抽取一些元素的代码
2012/11/05 PHP
php检索或者复制远程文件的方法
2015/03/13 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
关于js内存泄露的一个好例子
2013/12/09 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
2017/05/13 jQuery
基于JavaScript获取base64图片大小
2019/10/18 Javascript
微信小程序实现聊天室
2020/08/21 Javascript
javascript实现点击小图显示大图
2020/11/29 Javascript
[03:56]还原FTP电影首映式 DOTA2群星拼出遗迹世界
2014/03/26 DOTA
[04:11]2014DOTA2国际邀请赛 CIS遗憾出局梦想不灭
2014/07/09 DOTA
用Python编程实现语音控制电脑
2014/04/01 Python
Python采用Django开发自己的博客系统
2020/09/29 Python
Python获取当前页面内所有链接的四种方法对比分析
2017/08/19 Python
PyQt5每天必学之事件与信号
2018/04/20 Python
使用python对文件中的数值进行累加的实例
2018/11/28 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
把pandas转换int型为str型的方法
2019/01/29 Python
用Python+OpenCV对比图像质量的几种方法
2019/07/15 Python
python logging添加filter教程
2019/12/24 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
Python远程方法调用实现过程解析
2020/07/28 Python
阿拉伯世界最大的电子卖场:Souq埃及
2016/08/01 全球购物
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
幼儿园大班毕业教师寄语
2014/04/03 职场文书
《长相思》听课反思
2014/04/10 职场文书
售后服务承诺书怎么写
2014/05/21 职场文书
抗洪救灾先进集体事迹材料
2014/05/26 职场文书
学校宣传标语
2014/06/18 职场文书
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis