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 相关文章推荐
zTree插件之多选下拉菜单实例代码
Nov 06 Javascript
JS小游戏之象棋暗棋源码详解
Sep 25 Javascript
ANGULARJS中使用JQUERY分页控件
Sep 16 Javascript
JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】
Sep 04 Javascript
Angularjs 手写日历的实现代码(不用插件)
Oct 18 Javascript
浅析node应用的timing-attack安全漏洞
Feb 28 Javascript
为什么要使用Vuex的介绍
Jan 19 Javascript
JS实现的点击按钮图片上下滚动效果示例
Jan 28 Javascript
vue导航栏部分的动态渲染实例
Nov 01 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
Nov 20 Javascript
JS中间件设计模式的深入探讨与实例分析
Apr 11 Javascript
Element实现动态表格的示例代码
Aug 02 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打开和关闭文件操作函数总结
2014/11/18 PHP
Symfony2学习笔记之模板用法详解
2016/03/17 PHP
PHP实现浏览器中直接输出图片的方法示例
2018/03/14 PHP
使用laravel指定日志文件记录任意日志
2019/10/17 PHP
DEFER怎么用?
2006/07/01 Javascript
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
利用毫秒减值计算时长的js代码
2013/09/22 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
JavaScript中使用concat()方法拼接字符串的教程
2015/06/06 Javascript
js微信分享API
2020/10/11 Javascript
微信JS接口大全
2016/08/25 Javascript
Bootstrap进度条实现代码解析
2017/03/07 Javascript
详解vue表单验证组件 v-verify-plugin
2017/04/19 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
JavaScript ES6中的简写语法总结与使用技巧
2018/12/30 Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
2019/07/25 Javascript
layui实现checkbox的目录树tree的例子
2019/09/12 Javascript
vue遍历生成的输入框 绑定及修改值示例
2019/10/30 Javascript
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
[03:56]DOTA2完美大师赛趣味视频之小鸽子和Mineski打台球
2017/11/24 DOTA
python使用marshal模块序列化实例
2014/09/25 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
Pandas 数据处理,数据清洗详解
2018/07/10 Python
Python制作动态字符图的实例
2019/01/27 Python
python利用跳板机ssh远程连接redis的方法
2019/02/19 Python
Python运行提示缺少模块问题解决方案
2020/04/02 Python
adidas美国官网:adidas US
2016/09/21 全球购物
美国高档帽子网上商店:Hats.com
2018/08/09 全球购物
几个数据库方面的面试题
2016/07/01 面试题
优秀学生自我鉴定范例
2013/12/18 职场文书
元旦获奖感言
2014/03/08 职场文书
教师节活动总结
2014/08/29 职场文书
100句拼搏进取的名言警句,值得一读!
2019/10/07 职场文书
晶体管单管来复再生式收音机
2021/04/22 无线电