js取两个数组的交集|差集|并集|补集|去重示例代码


Posted in Javascript onAugust 07, 2013
/** 
* each是一个集合迭代函数,它接受一个函数作为参数和一组可选的参数 
* 这个迭代函数依次将集合的每一个元素和可选参数用函数进行计算,并将计算得的结果集返回 
{%example 
<script> 
var a = [1,2,3,4].each(function(x){return x > 2 ? x : null}); 
var b = [1,2,3,4].each(function(x){return x < 0 ? x : null}); 
alert(a); 
alert(b); 
</script> 
%} 
* @param {Function} fn 进行迭代判定的函数 
* @param more ... 零个或多个可选的用户自定义参数 
* @returns {Array} 结果集,如果没有结果,返回空集 
*/ 
Array.prototype.each = function(fn){ 
fn = fn || Function.K; 
var a = []; 
var args = Array.prototype.slice.call(arguments, 1); 
for(var i = 0; i < this.length; i++){ 
var res = fn.apply(this,[this[i],i].concat(args)); 
if(res != null) a.push(res); 
} 
return a; 
}; /** 
* 得到一个数组不重复的元素集合<br/> 
* 唯一化一个数组 
* @returns {Array} 由不重复元素构成的数组 
*/ 
Array.prototype.uniquelize = function(){ 
var ra = new Array(); 
for(var i = 0; i < this.length; i ++){ 
if(!ra.contains(this[i])){ 
ra.push(this[i]); 
} 
} 
return ra; 
}; 
/** 
* 求两个集合的补集 
{%example 
<script> 
var a = [1,2,3,4]; 
var b = [3,4,5,6]; 
alert(Array.complement(a,b)); 
</script> 
%} 
* @param {Array} a 集合A 
* @param {Array} b 集合B 
* @returns {Array} 两个集合的补集 
*/ 
Array.complement = function(a, b){ 
return Array.minus(Array.union(a, b),Array.intersect(a, b)); 
}; 
/** 
* 求两个集合的交集 
{%example 
<script> 
var a = [1,2,3,4]; 
var b = [3,4,5,6]; 
alert(Array.intersect(a,b)); 
</script> 
%} 
* @param {Array} a 集合A 
* @param {Array} b 集合B 
* @returns {Array} 两个集合的交集 
*/ 
Array.intersect = function(a, b){ 
return a.uniquelize().each(function(o){return b.contains(o) ? o : null}); 
}; 
/** 
* 求两个集合的差集 
{%example 
<script> 
var a = [1,2,3,4]; 
var b = [3,4,5,6]; 
alert(Array.minus(a,b)); 
</script> 
%} 
* @param {Array} a 集合A 
* @param {Array} b 集合B 
* @returns {Array} 两个集合的差集 
*/ 
Array.minus = function(a, b){ 
return a.uniquelize().each(function(o){return b.contains(o) ? null : o}); 
}; 
/** 
* 求两个集合的并集 
{%example 
<script> 
var a = [1,2,3,4]; 
var b = [3,4,5,6]; 
alert(Array.union(a,b)); 
</script> 
%} 
* @param {Array} a 集合A 
* @param {Array} b 集合B 
* @returns {Array} 两个集合的并集 
*/ 
Array.union = function(a, b){ 
return a.concat(b).uniquelize(); 
};
Javascript 相关文章推荐
[推荐]javascript 面向对象技术基础教程
Mar 03 Javascript
js 禁止选择功能实现代码(兼容IE/Firefox)
Apr 23 Javascript
基于jquery实现的表格分页实现代码
Jun 21 Javascript
javascript函数重载解决方案分享
Feb 19 Javascript
jQuery模拟新浪微博首页滚动效果的方法
Mar 11 Javascript
javascript实现类似java中getClass()得到对象类名的方法
Jul 27 Javascript
JavaScipt选取文档元素的方法(推荐)
Aug 05 Javascript
微信小程序 wxapp内容组件 progress详细介绍
Oct 31 Javascript
Vue.js项目模板搭建图文教程
Sep 20 Javascript
vue中的模态对话框组件实现过程
May 01 Javascript
微信小程序实现蒙版弹窗效果
Nov 01 Javascript
jQuery实现的简单歌词滚动功能示例
Jan 07 jQuery
js使浏览器窗口最大化实现代码(适用于IE)
Aug 07 #Javascript
javascript一元操作符(递增、递减)使用示例
Aug 07 #Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
Aug 07 #Javascript
uploadify在Firefox下丢失session问题的解决方法
Aug 07 #Javascript
firefox浏览器不支持innerText的解决方法
Aug 07 #Javascript
javascript的内存管理详解
Aug 07 #Javascript
javaScript函数中执行C#代码中的函数方法总结
Aug 07 #Javascript
You might like
php curl模拟post请求小实例
2013/11/13 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
2014/05/07 PHP
PHP Curl出现403错误的解决办法
2014/05/29 PHP
PHP基于socket实现客户端和服务端通讯功能
2017/07/13 PHP
PHP中isset、empty的用法与区别示例详解
2020/11/05 PHP
jquery移除button的inline onclick事件(已测试及兼容浏览器)
2013/01/25 Javascript
jquery缓动swing liner控制动画过程不同时刻的速度
2014/05/29 Javascript
JavaScript function 的 length 属性使用介绍
2014/09/15 Javascript
使用jsonp完美解决跨域问题
2014/11/27 Javascript
ExtJs动态生成treepanel的Json格式
2015/07/19 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
2015/08/21 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
js鼠标移动时禁止选中文字
2017/02/19 Javascript
JavaScript之实现一个简单的Vue示例
2019/01/17 Javascript
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
2017/09/06 Python
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
python实现字符串和字典的转换
2018/09/29 Python
在Python dataframe中出生日期转化为年龄的实现方法
2018/10/20 Python
用pycharm开发django项目示例代码
2018/10/24 Python
python requests.post带head和body的实例
2019/01/02 Python
详解Python的三种可变参数
2019/05/08 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
2019/12/11 Python
Python如何实现远程方法调用
2020/08/07 Python
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
南京某软件公司的.net面试题
2015/11/30 面试题
YII2 全局异常处理深入讲解
2021/03/24 PHP
五水共治一句话承诺
2014/05/30 职场文书
爱国主义教育演讲稿
2014/08/26 职场文书
企业挂职心得体会
2014/09/10 职场文书
学习作风建设心得体会
2014/10/22 职场文书
2016年优秀团员事迹材料
2016/02/25 职场文书
详解MySQL集群搭建
2021/05/26 MySQL