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 相关文章推荐
游戏人文件夹程序 ver 4.03
Jul 14 Javascript
用js实现计算代码行数的简单方法附代码
Aug 13 Javascript
JavaScript Konami Code 实现代码
Jul 29 Javascript
禁止js文件缓存的代码
Apr 09 Javascript
设为首页和收藏的Javascript代码(亲测兼容IE,Firefox,chrome等浏览器)
Nov 18 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
Nov 02 Javascript
jQuery防止重复绑定事件的解决方法
May 14 Javascript
AngularJS Ajax详解及示例代码
Aug 17 Javascript
详解前端自动化工具gulp自动添加版本号
Dec 20 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
Jun 22 Javascript
原生js实现的移动端可拖动进度条插件功能详解
Aug 15 Javascript
JS数组转字符串实现方法解析
Sep 04 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中PDO方式实现数据库的增删改查
2015/05/17 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
(仅IE下有效)关于checkbox 三态
2007/05/12 Javascript
JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
2008/11/03 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
jquery validation验证身份证号,护照,电话号码,email(实例代码)
2013/11/06 Javascript
获取鼠标在div中的相对位置的实现代码
2013/12/30 Javascript
js document.write()使用介绍
2014/02/21 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
微信小程序 天气预报开发实例代码源码
2017/01/20 Javascript
Vue项目使用CDN优化首屏加载问题
2018/04/01 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
2014/05/06 Python
Python读写Excel文件方法介绍
2014/11/22 Python
Python中的列表知识点汇总
2015/04/14 Python
python使用MySQLdb访问mysql数据库的方法
2015/08/03 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
Python内存管理方式和垃圾回收算法解析
2017/11/11 Python
浅谈python下tiff图像的读取和保存方法
2018/12/04 Python
对python中的控制条件、循环和跳出详解
2019/06/24 Python
利用python实现平稳时间序列的建模方式
2020/06/03 Python
Django多数据库联用实现方法解析
2020/11/12 Python
英国时尚家具、家居饰品及礼品商店:Graham & Green
2016/09/15 全球购物
日本非常有名的内衣丝袜品牌:GUNZE
2017/01/06 全球购物
农药学硕士毕业生自荐信
2013/09/25 职场文书
计算机专业自荐信
2013/10/14 职场文书
《浅水洼里的小鱼》听课反思
2014/02/28 职场文书
社区道德讲堂实施方案
2014/03/21 职场文书
2014年小学重阳节活动策划方案
2014/09/16 职场文书
单位一把手群众路线四风问题整改措施
2014/09/25 职场文书
镇人大副主席民主生活会对照检查材料思想汇报
2014/10/01 职场文书
单身证明格式样本
2015/06/15 职场文书
初中生活随笔
2015/08/15 职场文书
五年级作文之学校的四季
2019/12/05 职场文书
redis实现共同好友的思路详解
2021/05/26 Redis
Redis keys命令的具体使用
2022/06/05 Redis