JS数组交集、并集、差集的示例代码


Posted in Javascript onAugust 23, 2017

 本文介绍了JS数组交集、并集、差集,分享给大家,具体如下:

由于下面会用到ES5的方法,低版本会存在兼容,先应添加对应的polyfill

Array.prototype.indexOf = Array.prototype.indexOf || function (searchElement, fromIndex) {
  var index = -1;
  fromIndex = fromIndex * 1 || 0;
  for (var k = 0, length = this.length; k < length; k++) {
    if (k >= fromIndex && this[k] === searchElement) {
      index = k;
      break;
    }
  }
  return index;
};

Array.prototype.filter = Array.prototype.filter || function (fn, context) {
  var arr = [];
  if (typeof fn === "function") {
    for (var k = 0, length = this.length; k < length; k++) {
      fn.call(context, this[k], k, this) && arr.push(this[k]);
    }
  }
  return arr;
};

依赖数组去重方法:

// 数组去重
Array.prototype.unique = function() {
  var n = {}, r = [];
  for (var i = 0; i < this.length; i++) {
    if (!n[this[i]]) {
      n[this[i]] = true;
      r.push(this[i]); 
    }
  }
  return r;
}

交集

交集元素由既属于集合A又属于集合B的元素组成

Array.intersect = function(arr1, arr2) {
  if(Object.prototype.toString.call(arr1) === "[object Array]" && Object.prototype.toString.call(arr2) === "[object Array]") {
    return arr1.filter(function(v){ 
     return arr2.indexOf(v)!==-1 
    }) 
  }
}
// 使用方式
Array.intersect([1,2,3,4], [3,4,5,6]); // [3,4]

并集

并集元素由集合A和集合B中所有元素去重组成

Array.union = function(arr1, arr2) {
  if(Object.prototype.toString.call(arr1) === "[object Array]" && Object.prototype.toString.call(arr2) === "[object Array]") {
    return arr1.concat(arr2).unique()
  }
}
// 使用方式
Array.union([1,2,3,4], [1,3,4,5,6]); // [1,2,3,4,5,6]

差集

A的差集:属于A集合不属于B集合的元素

B的差集:属于B集合不属于A集合的元素

Array.prototype.minus = function(arr) {
  if(Object.prototype.toString.call(arr) === "[object Array]") {
    var interArr = Array.intersect(this, arr);// 交集数组
    return this.filter(function(v){
      return interArr.indexOf(v) === -1
    })
  }
}
// 使用方式
var arr = [1,2,3,4];
arr.minus([2,4]); // [1,3]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
在 IE 中调用 javascript 打开 Excel 表
Dec 21 Javascript
js动态修改表格行colspan列跨度的方法
Mar 30 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
Apr 25 Javascript
javascript省市级联功能实现方法实例详解
Oct 20 Javascript
javascript实现input file上传图片预览效果
Dec 31 Javascript
AngularJS 实现弹性盒子布局的方法
Aug 30 Javascript
js仿iphone秒表功能 计算平均数
Jan 11 Javascript
vue2 自定义动态组件所遇到的问题
Jun 08 Javascript
基于canvas粒子系统的构建详解
Aug 31 Javascript
node.js express框架简介与实现
Jul 23 Javascript
JavaScript数组类型Array相关的属性与方法详解
Sep 08 Javascript
Vue与React的区别和优势对比
Dec 18 Vue.js
关于Vue实现组件信息的缓存问题
Aug 23 #Javascript
详解webpack进阶之loader篇
Aug 23 #Javascript
Vue中定义全局变量与常量的各种方式详解
Aug 23 #Javascript
基于JavaScript实现带数据验证和复选框的表单提交
Aug 23 #Javascript
使用JS组件实现带ToolTip验证框的实例代码
Aug 23 #Javascript
利用Vue实现移动端图片轮播组件的方法实例
Aug 23 #Javascript
详解AngularJS跨页面传值(ui-router)
Aug 23 #Javascript
You might like
邮箱正则表达式实现代码(针对php)
2013/06/21 PHP
WordPress中限制非管理员用户在文章后只能评论一次
2015/12/31 PHP
PHP对象、模式与实践之高级特性分析
2016/12/08 PHP
很棒的学习jQuery的12个网站推荐
2011/04/28 Javascript
兼容FF和IE的动态table示例自写
2013/10/21 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
JQuery实现展开关闭层的方法
2015/02/17 Javascript
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
JavaScript+html5 canvas绘制缤纷多彩的三角形效果完整实例
2016/01/26 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
2017/03/30 jQuery
Angular 4依赖注入学习教程之ValueProvider的使用(七)
2017/06/04 Javascript
vue 组件中slot插口的具体用法
2018/04/03 Javascript
python实现获取客户机上指定文件并传输到服务器的方法
2015/03/16 Python
ansible作为python模块库使用的方法实例
2017/01/17 Python
Python标准库sched模块使用指南
2017/07/06 Python
浅谈Python中的私有变量
2018/02/28 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
Jupyter notebook运行Spark+Scala教程
2020/04/10 Python
python异步Web框架sanic的实现
2020/04/27 Python
python实现自动清理重复文件
2020/08/24 Python
CSS3提交意见输入框样式代码
2014/10/30 HTML / CSS
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
详解window.open被浏览器拦截的解决方案
2019/07/18 HTML / CSS
HTML5 3D旋转相册的实现示例
2019/12/03 HTML / CSS
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
2014/09/16 面试题
2014年党员整改措施范文
2014/09/21 职场文书
个人党性分析材料
2014/12/19 职场文书
大学生学年个人总结
2015/02/15 职场文书
财务稽核岗位职责
2015/04/13 职场文书
初中生活随笔
2015/08/15 职场文书
golang gopm get -g -v 无法获取第三方库的解决方案
2021/05/05 Golang
详解MySQL的Seconds_Behind_Master
2021/05/18 MySQL
Python 数据可视化之Matplotlib详解
2021/11/02 Python
世界十大狙击步枪排行榜
2022/03/20 杂记
Win10加载疑难解答时出错发生意外错误的解决方法
2022/07/07 数码科技