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 相关文章推荐
字符串的replace方法应用浅析
Dec 06 Javascript
javascript 得到文件后缀名的思路及实现
May 09 Javascript
Jquery实现自定义窗口随意的拖拽
Mar 12 Javascript
使用命令对象代替switch语句的写法示例
Feb 28 Javascript
举例讲解AngularJS中的模块
Jun 17 Javascript
深入讲解AngularJS中的自定义指令的使用
Jun 18 Javascript
jQuery根据元素值删除数组元素的方法
Jun 24 Javascript
详解JavaScript的表达式与运算符
Nov 30 Javascript
ES6新特性六:promise对象实例详解
Apr 21 Javascript
JavaScript实现QQ聊天消息展示和评论提交功能
May 22 Javascript
vue 实现微信浮标效果
Sep 01 Javascript
typescript编写微信小程序创建项目的方法
Jan 29 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上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
php HandlerSocket的使用
2011/05/02 PHP
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
浅谈laravel数据库查询返回的数据形式
2019/10/21 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
2020/04/26 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
JQuery读取XML文件数据并显示的实现代码
2009/12/16 Javascript
十分钟打造AutoComplete自动完成效果代码
2009/12/26 Javascript
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
Javascript 闭包引起的IE内存泄露分析
2012/05/23 Javascript
jquery连缀语法如何实现
2012/11/29 Javascript
BootStrap扔进Django里的方法详解
2016/05/13 Javascript
jQuery+ajax读取并解析XML文件的方法
2016/09/09 Javascript
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
ES6基础之展开语法(Spread syntax)
2019/02/21 Javascript
微信小程序环境下将文件上传到OSS的方法步骤
2019/05/31 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
2019/10/31 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
基于html+css+js实现简易计算器代码实例
2020/02/28 Javascript
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
[01:06:42]VP vs NewBee Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
Python的Urllib库的基本使用教程
2015/04/30 Python
Python通过RabbitMQ服务器实现交换机功能的实例教程
2016/06/29 Python
使用Python实现简单的服务器功能
2017/08/25 Python
opencv python 傅里叶变换的使用
2018/07/21 Python
windows下numpy下载与安装图文教程
2019/04/02 Python
Python configparser模块配置文件过程解析
2020/03/03 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
五四青年节优秀演讲稿范文
2014/05/28 职场文书
中学生社会实践活动总结
2014/07/03 职场文书
工作时间擅自离岗检讨书
2014/10/24 职场文书
2014年公务员转正工作总结
2014/11/07 职场文书
护士自我推荐信范文
2015/03/24 职场文书
勇敢的心观后感
2015/06/09 职场文书
合作协议书格式范本
2016/03/21 职场文书