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 相关文章推荐
extjs 学习笔记(三) 最基本的grid
Oct 15 Javascript
浅谈javascript 面向对象编程
Oct 28 Javascript
jquery实现点击弹出层效果的简单实例
Mar 03 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
May 04 Javascript
jquery实现左右滑动菜单效果代码
Aug 27 Javascript
异步JS框架的作用以及实现方法
Oct 29 Javascript
微信小程序 闭包写法详细介绍
Dec 14 Javascript
JavaScript与Java正则表达式写法的区别介绍
Aug 15 Javascript
详解JS中的柯里化(currying)
Aug 17 Javascript
Layui table 组件的使用之初始化加载数据、数据刷新表格、传参数
Sep 11 Javascript
Vue组件通信的几种实现方法
Apr 25 Javascript
vue + typescript + 极验登录验证的实现方法
Jun 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数学运算
2011/12/30 PHP
PHP的5个安全措施小结
2012/07/17 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
广告切换效果(缓动切换)
2009/05/27 Javascript
Jquery图片滚动与幻灯片的实例代码
2013/04/08 Javascript
D3.js 从P元素的创建开始(显示可加载数据)
2014/10/30 Javascript
JavaScript数组随机排列实现随机洗牌功能
2015/03/19 Javascript
javascript常用的方法分享
2015/07/01 Javascript
原生js实现jquery函数animate()动画效果的简单实例
2016/08/21 Javascript
javascript读取文本节点方法小结
2016/12/15 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
JS实现的缓冲运动效果示例
2018/04/30 Javascript
JavaScript JSON数据处理全集(小结)
2019/08/15 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
vue键盘事件点击事件加native操作
2020/07/27 Javascript
vue制作toast组件npm包示例代码
2020/10/29 Javascript
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
Python3.x版本中新的字符串格式化方法
2015/04/24 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
2018/04/20 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
Python基础知识点 初识Python.md
2019/05/14 Python
python pandas cumsum求累计次数的用法
2019/07/29 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
OpenCV利用python来实现图像的直方图均衡化
2020/10/21 Python
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
英国时尚配饰、珠宝和服装网站:KJ Beckett
2020/01/23 全球购物
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
库房主管岗位职责
2013/12/31 职场文书
个人担保书格式范文
2014/05/12 职场文书
温馨提示标语
2014/06/26 职场文书
小班教师个人总结
2015/02/05 职场文书
2015年小学数学教师工作总结
2015/05/20 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书
Vue实现下拉加载更多
2021/05/09 Vue.js
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers