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 相关文章推荐
javascript add event remove event
Apr 07 Javascript
学习面向对象之面向对象的术语
Nov 30 Javascript
javascript学习笔记(十九) 节点的操作实现代码
Jun 20 Javascript
JavaScript版TAB选项卡效果实例
Aug 16 Javascript
js常用系统函数用法实例分析
Jan 12 Javascript
JS返回iframe中frameBorder属性值的方法
Apr 01 Javascript
原生js图片轮播效果实现代码
Oct 19 Javascript
深入理解javascript中concat方法
Dec 12 Javascript
深入学习jQuery中的data()
Dec 22 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
Jan 03 Javascript
vue todo-list组件发布到npm上的方法
Apr 04 Javascript
vue项目中跳转到外部链接的实例讲解
Sep 20 Javascript
关于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/08/24 PHP
php预定义变量使用帮助(带实例)
2013/10/30 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
yii2安装详细流程
2018/05/23 PHP
php的命名空间与自动加载实现方法
2019/08/25 PHP
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
2010/12/02 Javascript
JavaScript使用ActiveXObject访问Access和SQL Server数据库
2015/04/02 Javascript
在HTML中插入JavaScript代码的示例
2015/06/03 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
2015/09/04 Javascript
node.js入门实例helloworld详解
2015/12/23 Javascript
JavaScript实现图片自动加载的瀑布流效果
2016/04/11 Javascript
JavaScript实现倒计时跳转页面功能【实用】
2016/12/13 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
2018/03/07 Javascript
微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题
2018/10/09 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
JS算法题之查找数字在数组中的索引位置
2019/05/15 Javascript
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 jQuery
vue3.0 自适应不同分辨率电脑的操作
2021/02/06 Vue.js
Python命名空间详解
2014/08/18 Python
Python 冒泡,选择,插入排序使用实例
2015/02/05 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
Python类和对象的定义与实际应用案例分析
2018/12/27 Python
详解Python_shutil模块
2019/03/15 Python
Python SMTP配置参数并发送邮件
2020/06/16 Python
Python通过format函数格式化显示值
2020/10/17 Python
HTML5标签与HTML4标签的区别示例介绍
2013/07/18 HTML / CSS
一个不错的HTML5 Canvas多层点击事件监听实例
2014/04/29 HTML / CSS
北欧最好的童装网上商店:Babyshop
2019/09/15 全球购物
90后毕业生的求职信范文
2013/09/21 职场文书
优秀员工自荐信范文
2013/10/05 职场文书
三字经教学反思
2014/04/26 职场文书
安全标语口号
2014/06/09 职场文书
酒吧七夕情人节宣传语
2015/11/24 职场文书
使用JS前端技术实现静态图片局部流动效果
2022/08/05 Javascript