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 IFrame 强制刷新代码
Jul 23 Javascript
javascript cookie操作类的实现代码小结附使用方法
Jun 02 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
Dec 08 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
Sep 24 Javascript
vue使用watch 观察路由变化,重新获取内容
Mar 08 Javascript
JavaScript变量作用域_动力节点Java学院整理
Jun 27 Javascript
JS中正则表达式要注意lastIndex属性
Aug 08 Javascript
node的process以及child_process模块学习笔记
Mar 06 Javascript
JavaScript类的继承操作实例总结
Dec 20 Javascript
Vue中关闭弹窗组件时销毁并隐藏操作
Sep 01 Javascript
微信小程序实现打卡签到页面
Sep 21 Javascript
微信小程序实现购物车功能
Nov 18 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
怎样在UNIX系统下安装MySQL
2006/10/09 PHP
php检测网页是否被百度收录的函数代码
2013/10/09 PHP
php设置允许大文件上传示例代码
2014/03/10 PHP
PHP+MySql+jQuery实现的&quot;顶&quot;和&quot;踩&quot;投票功能
2016/05/21 PHP
PHP7基于curl实现的上传图片功能
2018/05/11 PHP
PHP绕过open_basedir限制操作文件的方法
2018/06/10 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
js简单实现HTML标签Select联动带跳转
2013/10/23 Javascript
js实现省市联动效果的简单实例
2014/02/10 Javascript
js判断设备是否为PC并调整图片大小
2014/02/12 Javascript
Js遍历键值对形式对象或Map形式的方法
2016/08/08 Javascript
JavaScript实现简单图片轮播效果
2017/08/21 Javascript
详解bootstrap用dropdown-menu实现上下文菜单
2017/09/22 Javascript
详解微信小程序中的页面代码中的模板的封装
2017/10/12 Javascript
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
在create-react-app中使用sass的方法示例
2018/10/01 Javascript
vue全局自定义指令-元素拖拽的实现代码
2019/04/14 Javascript
js神秘的电报密码 哈弗曼编码实现
2019/09/10 Javascript
python批量提交沙箱问题实例
2014/10/08 Python
Python中pygal绘制雷达图代码分享
2017/12/07 Python
Python对List中的元素排序的方法
2018/04/01 Python
Keras自定义IOU方式
2020/06/10 Python
Python unittest discover批量执行代码实例
2020/09/08 Python
HTML5 Web 存储详解
2016/09/16 HTML / CSS
品学兼优的大学生自我评价
2013/09/20 职场文书
员工年终演讲稿
2014/01/03 职场文书
基层党组织整改方案
2014/10/25 职场文书
英文感谢信格式
2015/01/21 职场文书
2015年乡镇扶贫工作总结
2015/04/08 职场文书
教师节班会开场白
2015/06/01 职场文书
幼儿园园长新年寄语
2015/08/17 职场文书
Axios取消重复请求的方法实例详解
2021/06/15 Javascript
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS
python Tkinter模块使用方法详解
2022/04/07 Python
基于Redission的分布式锁实战
2022/08/14 Redis