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 相关文章推荐
jQuery插件-jRating评分插件源码分析及使用方法
Dec 28 Javascript
原生js实现数字字母混合验证码的简单实例
Dec 10 Javascript
浅谈时钟的生成(js手写简洁代码)
Aug 20 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
Sep 23 Javascript
老生常谈javascript的类型转换
Oct 12 Javascript
jQuery实现一个简单的轮播图
Feb 19 Javascript
AngularJS遍历获取数组元素的方法示例
Nov 11 Javascript
vue.js2.0 实现better-scroll的滚动效果实例详解
Aug 13 Javascript
Electron-vue脚手架改造vue项目的方法
Oct 22 Javascript
Vue表单控件绑定图文详解
Feb 11 Javascript
微信小程序使用 vant Dialog组件的正确方式
Feb 21 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
Jun 01 Javascript
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静态变量当缓存的方法
2013/11/13 PHP
php is_executable判断给定文件名是否可执行实例
2016/09/26 PHP
javascript获取当前ip的代码
2009/05/10 Javascript
JavaScript Konami Code 实现代码
2009/07/29 Javascript
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
2010/04/01 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
js判断元素是否隐藏的方法
2014/06/09 Javascript
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
javascript cookie的简单应用
2016/02/24 Javascript
简单的分页代码js实现
2016/05/17 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
解决Window10系统下Node安装报错的问题分析
2016/12/13 Javascript
原生JS实现在线问卷调查投票特效
2017/01/03 Javascript
Vue.js学习之过滤器详解
2017/01/22 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
vue 下列表侧滑操作实例代码详解
2018/07/24 Javascript
javascript实现简单打字游戏
2019/10/29 Javascript
使用Python的Flask框架实现视频的流媒体传输
2015/03/31 Python
python实现一个简单的ping工具方法
2019/01/31 Python
Python提取支付宝和微信支付二维码的示例代码
2019/02/15 Python
python实现可逆简单的加密算法
2019/03/22 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
Python实现图片添加文字
2019/11/26 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
Python 实现将某一列设置为str类型
2020/07/14 Python
澳大利亚时尚前卫设计师珠宝在线:Amber Sceats
2017/10/04 全球购物
程序集与命名空间有什么不同
2014/07/25 面试题
简单叙述一下MYSQL的优化
2016/05/09 面试题
营业员个人总结的自我评价
2013/10/25 职场文书
雷锋观后感
2015/06/10 职场文书
优质服务心得体会(共4篇)
2016/01/22 职场文书
Python数据分析之pandas函数详解
2021/04/21 Python