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增加和删除元素的方法
Jan 14 Javascript
javascript点击按钮实现隐藏显示切换效果
Feb 03 Javascript
jQuery动态添加可拖动元素完整实例(附demo源码下载)
Jun 21 Javascript
Jquery把获取到的input值转换成json
May 15 jQuery
js学习总结之DOM2兼容处理顺序问题的解决方法
Jul 27 Javascript
node.js-v6新版安装具体步骤(分享)
Sep 06 Javascript
使用JS实现导航切换时高亮显示的示例讲解
Aug 22 Javascript
jQuery each和js forEach用法比较
Feb 27 jQuery
vue下载excel的实现代码后台用post方法
May 10 Javascript
layui操作列按钮个数和文字颜色的判断实例
Sep 11 Javascript
jquery实现上传文件进度条
Mar 26 jQuery
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
Nov 04 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
全国FM电台频率大全 - 26 西藏自治区
2020/03/11 无线电
PHP网上调查系统
2006/10/09 PHP
php操作(删除,提取,增加)zip文件方法详解
2015/03/12 PHP
漂亮的仿flash菜单,来自蓝色经典
2006/06/26 Javascript
基于js disabled=&quot;false&quot;不起作用的解决办法
2013/06/26 Javascript
javascript不同类型数据之间的运算的转换方法
2014/02/13 Javascript
jquery统计用户选中的复选框的个数
2014/06/06 Javascript
JS简单实现城市二级联动选择插件的方法
2015/08/19 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
vue实现导航栏效果(选中状态刷新不消失)
2017/12/13 Javascript
Vue组件通信之Bus的具体使用
2017/12/28 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
JS装饰器函数用法总结
2018/04/21 Javascript
详解vue 命名视图
2019/08/14 Javascript
压缩包密码破解示例分享(类似典破解)
2014/01/17 Python
python 读写、创建 文件的方法(必看)
2016/09/12 Python
EM算法的python实现的方法步骤
2018/01/02 Python
Zookeeper接口kazoo实例解析
2018/01/22 Python
tensorflow中next_batch的具体使用
2018/02/02 Python
tensorflow获取变量维度信息
2018/03/10 Python
Python快速查找list中相同部分的方法
2018/06/27 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
2018/11/10 Python
Python2和Python3中urllib库中urlencode的使用注意事项
2018/11/26 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
python3.6根据m3u8下载mp4视频
2019/06/17 Python
css3 中的新特性加强记忆详解
2016/04/16 HTML / CSS
CSS3 实现发光边框特效
2020/11/11 HTML / CSS
绿化工程实施方案
2014/03/17 职场文书
献爱心标语
2014/06/21 职场文书
井冈山红色之旅感想
2014/10/07 职场文书
2014年保安个人工作总结
2014/11/13 职场文书
单位更名证明
2015/06/18 职场文书
小学一年级班主任工作经验交流材料
2015/11/02 职场文书
PHP使用QR Code生成二维码实例
2021/07/07 PHP
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang