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中实现最高效的数组乱序方法
Oct 11 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
Oct 16 Javascript
JavaScript变量声明详解
Nov 27 Javascript
Javascript删除指定元素节点的方法
Jun 21 Javascript
全面接触神奇的Bootstrap导航条实战篇
Aug 01 Javascript
浅谈js中test()函数在正则中的使用
Aug 19 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
May 09 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
Feb 16 Javascript
微信小程序实现长按删除图片的示例
May 18 Javascript
js统计页面上每个标签的数量实例代码
May 29 Javascript
VUEX 数据持久化,刷新后重新获取的例子
Nov 12 Javascript
javscript 数组扁平化的实现
Feb 03 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中使用cookie来保存用户登录信息的实现代码
2012/03/08 PHP
解析PHP高效率写法(详解原因)
2013/06/20 PHP
php数据序列化测试实例详解
2017/08/12 PHP
javascript中利用数组实现的循环队列代码
2010/01/24 Javascript
Extjs入门之动态加载树代码
2010/04/09 Javascript
jquery中对于批量deferred的处理方法
2014/01/22 Javascript
js在指定位置增加节点函数insertBefore()用法实例
2015/01/12 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
js去字符串前后空格的实现方法
2016/02/26 Javascript
在iframe中使bootstrap的模态框在父页面弹出问题
2017/08/07 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
JavaScript事件委托原理与用法实例分析
2018/06/07 Javascript
node 解析图片二维码的内容代码实例
2019/09/11 Javascript
vue组件系列之TagsInput详解
2020/05/14 Javascript
python实现apahce网站日志分析示例
2014/04/02 Python
整理Python 常用string函数(收藏)
2016/05/30 Python
python中hashlib模块用法示例
2017/10/30 Python
pytorch + visdom CNN处理自建图片数据集的方法
2018/06/04 Python
对Python 内建函数和保留字详解
2018/10/15 Python
python如何实现数据的线性拟合
2019/07/19 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
2020/02/25 Python
python 实现图像快速替换某种颜色
2020/06/04 Python
Python requests模块安装及使用教程图解
2020/06/30 Python
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
软件测试面试题
2015/10/21 面试题
2014年三八妇女节活动总结
2014/03/01 职场文书
员工保密承诺书
2014/05/28 职场文书
民生工作实施方案
2014/05/31 职场文书
法英专业大学生职业生涯规划范文:衡外情,量己力!
2014/09/23 职场文书
整改落实情况汇报材料
2014/10/29 职场文书
结婚当天新郎保证书
2015/05/08 职场文书
复兴之路观后感3000字
2015/06/02 职场文书
评奖评优个人先进事迹材料
2015/11/04 职场文书
职场:企业印章管理制度(模板)
2019/10/18 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript