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 相关文章推荐
Iframe thickbox2.0使用的方法
Mar 05 Javascript
JavaScript中为元素加上name属性的方法
May 09 Javascript
JQuery的AJAX实现文件下载的小例子
May 15 Javascript
jquery特效 幻灯片效果示例代码
Jul 16 Javascript
js封装可使用的构造函数继承用法分析
Jan 28 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
Jul 27 Javascript
jQuery Validate插件实现表单强大的验证功能
Dec 18 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
May 16 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
Sep 01 Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
Jan 15 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
Sep 17 Javascript
使用layer模态框给新页面传值的方法
Sep 27 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/04/02 PHP
浅析php中三个等号(===)和两个等号(==)的区别
2013/08/06 PHP
php防止用户重复提交表单
2015/11/02 PHP
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
thinkphp5框架实现的自定义扩展类操作示例
2019/05/16 PHP
input 高级限制级用法
2009/03/26 Javascript
基于jQuery的Tab选项框效果代码(插件)
2011/03/01 Javascript
javascript 小数取整简单实现方式
2014/05/30 Javascript
Javascript 运动中Offset的bug解决方案
2014/12/24 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
Sublime Text 3常用插件及安装方法
2015/12/16 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
JS只能输入正整数的简单实例
2016/10/07 Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
2018/02/05 Javascript
Express下采用bcryptjs进行密码加密的方法
2018/02/07 Javascript
详解微信小程序回到顶部的两种方式
2019/05/09 Javascript
Vue+abp微信扫码登录的实现代码示例
2020/01/06 Javascript
微信小程序实现抖音播放效果的实例代码
2020/04/11 Javascript
python获取标准北京时间的方法
2015/03/24 Python
python追加元素到列表的方法
2015/07/28 Python
python自定义异常实例详解
2017/07/11 Python
TensorFlow安装及jupyter notebook配置方法
2017/09/08 Python
Python设计模式之代理模式简单示例
2018/01/09 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
2018/04/02 Python
完美解决在oj中Python的循环输入问题
2018/06/25 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
基于Pytorch SSD模型分析
2020/02/18 Python
责任书范本
2014/08/25 职场文书
建设工程授权委托书
2014/09/22 职场文书
交通事故死亡赔偿协议书
2014/12/03 职场文书
横店影视城导游词
2015/02/06 职场文书
2015毕业生简历自我评价
2015/03/02 职场文书
超强台风观后感
2015/06/09 职场文书
Java9新特性对HTTP2协议支持与非阻塞HTTP API
2022/03/16 Java/Android