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 相关文章推荐
js removeChild 障眼法 可能出现的错误
Oct 06 Javascript
javascript 当前日期转化为中文的实现代码
May 13 Javascript
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
Apr 01 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
Jan 21 Javascript
Jquery倒数计时按钮setTimeout的实例代码
Jul 04 Javascript
JS判断变量是否为空判断是否null
Jul 25 Javascript
JavaScript 事件入门知识
Apr 13 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
Sep 17 Javascript
JavaScript实现同一个页面打开多张图片
Dec 29 Javascript
Angularjs为ng-click事件传递参数
Jun 15 Javascript
浅谈高大上的微信小程序中渲染html内容—技术分享
Oct 25 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
Apr 23 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相关资料
2006/10/09 PHP
mac下Apache + MySql + PHP搭建网站开发环境
2014/06/02 PHP
php中static 静态变量和普通变量的区别
2016/12/01 PHP
PHP封装的mysqli数据库操作类示例
2019/02/16 PHP
javascript GUID生成器实现代码
2009/10/31 Javascript
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
下载文件个别浏览器文件名乱码解决办法
2013/03/19 Javascript
addEventListener 的用法示例介绍
2014/05/07 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
json的结构与遍历方法实例分析
2017/04/25 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
浅谈js获取ModelAndView值的问题
2018/03/28 Javascript
js异步上传多张图片插件的使用方法
2018/10/22 Javascript
vue中使用vue-cli接入融云实现即时通信
2019/04/19 Javascript
js实现点赞效果
2020/03/16 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
Python中为feedparser设置超时时间避免堵塞
2014/09/28 Python
Python实现多线程HTTP下载器示例
2017/02/11 Python
python图书管理系统
2020/04/05 Python
mac使用python识别图形验证码功能
2020/01/10 Python
python3实现飞机大战
2020/11/29 Python
python中K-means算法基础知识点
2021/01/25 Python
哈萨克斯坦最大的时装、鞋子和配饰在线商店:Lamoda.kz
2019/11/19 全球购物
介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)
2014/10/31 面试题
机关单位人员学雷锋心得体会
2014/03/10 职场文书
小学优秀班干部事迹材料
2014/05/25 职场文书
文明倡议书
2015/01/19 职场文书
2015年社区中秋节活动总结
2015/03/23 职场文书
2019数学教师下学期工作总结
2019/06/27 职场文书
python实现简单的井字棋
2021/05/26 Python
opencv用VS2013调试时用Image Watch插件查看图片
2021/07/26 Python
Python requests用法和django后台处理详解
2022/03/19 Python