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 相关文章推荐
jQuery图片的展开和收缩实现代码
Apr 16 Javascript
node.js中的fs.fstat方法使用说明
Dec 15 Javascript
JS实现一个按钮的方法
Feb 05 Javascript
JavaScript定时器和优化的取消定时器方法
Jul 03 Javascript
jquery实现简单实用的打分程序实例
Jul 23 Javascript
Bootstrap~多级导航(级联导航)的实现效果【附代码】
Mar 08 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
Apr 30 Javascript
bootstrap3 兼容IE8浏览器!
May 02 Javascript
轻松理解JavaScript之AJAX
Mar 15 Javascript
webpack构建换肤功能的思路详解
Nov 27 Javascript
利用vue + element实现表格分页和前端搜索的方法
Dec 25 Javascript
为react组件库添加typescript类型提示的方法
Jun 15 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
PhpMyAdmin中无法导入sql文件的解决办法
2010/01/08 PHP
PHP中的Streams详细介绍
2014/11/12 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
php简单实现快速排序的方法
2015/04/04 PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
2016/10/14 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
实现变速回到顶部的JavaScript代码
2011/05/09 Javascript
模拟电子签章盖章效果的jQuery插件源码
2013/06/24 Javascript
使用JQuery库提供的扩展功能实现自定义方法
2014/09/09 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
js获取滚动距离的方法
2015/05/30 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
简单实现JavaScript弹幕效果
2020/08/27 Javascript
Vue中使用vux配置代码详解
2018/09/16 Javascript
基于vue实现简易打地鼠游戏
2020/08/21 Javascript
[56:47]Ti4 循环赛第三日 iG vs Liquid
2014/07/12 DOTA
在Python的Django框架中调用方法和处理无效变量
2015/07/15 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
pandas实现选取特定索引的行
2018/04/20 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
Django学习笔记之为Model添加Action
2019/04/30 Python
python实现从ftp上下载文件的实例方法
2020/07/19 Python
简述python Scrapy框架
2020/08/17 Python
一套带答案的C++笔试题
2014/01/10 面试题
什么是GWT的Entry Point
2013/08/16 面试题
经济学博士求职自荐信范文
2013/11/23 职场文书
中专毕业生的自我鉴定
2013/12/01 职场文书
大学社团活动总结
2014/04/26 职场文书
施工安全员岗位职责
2015/04/11 职场文书
会议主持人开场白台词
2015/05/28 职场文书
2016年学校禁毒宣传活动工作总结
2016/04/05 职场文书
如何使用Maxwell实时同步mysql数据
2021/04/08 MySQL
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android