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下书写动态生成的xml(兼容火狐)
Apr 02 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
Oct 29 Javascript
jquery自动将form表单封装成json的具体实现
Mar 17 Javascript
JavaScript实现生成GUID(全局统一标识符)
Sep 05 Javascript
使用Ajax与服务器(JSON)通信实例
Nov 04 Javascript
详解js前端代码异常监控
Jan 11 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
Apr 13 Javascript
JS基于for语句编写的九九乘法表示例
Jan 04 Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
Aug 27 Javascript
vue-cli3+typescript新建一个项目的思路分析
Aug 06 Javascript
解决layui laydate 时间控件一闪而过的问题
Sep 28 Javascript
ant design vue 表格table 默认勾选几项的操作
Oct 31 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 翻页 实例代码
2009/08/07 PHP
PHP正确配置mysql(apache环境)
2011/08/28 PHP
php eval函数用法 PHP中eval()函数小技巧
2012/10/31 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
2013/04/10 PHP
PHP书写格式详解(必看)
2016/05/23 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
2018/06/05 PHP
ie 7/8不支持trim的属性的解决方案
2014/05/23 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
js 文字超出长度用省略号代替,鼠标悬停并以悬浮框显示实例
2016/12/06 Javascript
浅谈js script标签中的预解析
2016/12/30 Javascript
vue如何获取点击事件源的方法
2017/08/10 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
JS实现DOM删除节点操作示例
2018/04/04 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
2018/08/18 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
Python通过select实现异步IO的方法
2015/06/04 Python
Python 两个列表的差集、并集和交集实现代码
2016/09/21 Python
Python实现统计英文文章词频的方法分析
2019/01/28 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
2019/07/28 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
python列表生成器迭代器实例解析
2019/12/19 Python
Python基于当前时间批量创建文件
2020/05/07 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
德国网上花店:Valentins
2018/08/15 全球购物
Timberland法国官网:购买靴子、鞋子、衣服、夹克和配饰
2019/11/30 全球购物
新浪网技术部笔试题
2016/08/26 面试题
医学生个人求职信范文
2014/02/07 职场文书
公司业务员岗位职责
2014/03/18 职场文书
公证书标准格式
2014/04/10 职场文书
寄语是什么意思
2014/04/10 职场文书
蛋糕店创业计划书
2014/05/06 职场文书
幼儿园师德师风心得体会
2016/01/12 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书