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 相关文章推荐
jquery高效反选具体实现
May 05 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
Apr 17 Javascript
js生成的验证码的实现与技术分析
Sep 17 Javascript
使用jQueryMobile实现滑动翻页效果的方法
Feb 04 Javascript
jQuery插件MixItUp实现动画过滤和排序
Apr 12 Javascript
javascript实现控制文字大中小显示
Apr 28 Javascript
浅谈angularJS 作用域
Jul 05 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
May 05 Javascript
JS实现简易刻度时钟示例代码
Mar 11 Javascript
React如何避免重渲染
Apr 10 Javascript
Vue发布项目实例讲解
Jul 17 Javascript
vue-resource post数据时碰到Django csrf问题的解决
Mar 13 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
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
2014/07/02 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
2015/07/06 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
浅谈PHP匿名函数和闭包
2019/03/08 PHP
键盘控制事件应用教程大全
2006/11/24 Javascript
javascript 写类方式之五
2009/07/05 Javascript
js post方式传递提交的实现代码
2010/05/31 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
jQuery实现图像旋转动画效果
2016/05/29 Javascript
AngularJS 模块详解及简单实例
2016/07/28 Javascript
Bootstrap Img 图片样式(推荐)
2016/12/13 Javascript
深入浅析vue组件间事件传递
2017/12/29 Javascript
vue-cli 3.0 自定义vue.config.js文件,多页构建的方法
2018/09/19 Javascript
Vue 事件处理操作实例详解
2019/03/05 Javascript
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
python解析xml文件实例分享
2013/12/04 Python
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
Python实现约瑟夫环问题的方法
2016/05/03 Python
python 实现删除文件或文件夹实例详解
2016/12/04 Python
python列表的增删改查实例代码
2018/01/30 Python
python 文件转成16进制数组的实例
2018/07/09 Python
Python常见数字运算操作实例小结
2019/03/22 Python
Django框架反向解析操作详解
2019/11/28 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
2020/02/26 Python
python程序输出无内容的解决方式
2020/04/09 Python
Python使用matplotlib绘制圆形代码实例
2020/05/27 Python
英国计算机产品零售商:Novatech(定制个人电脑、笔记本电脑、工作站和服务器)
2018/01/28 全球购物
EGO Shoes美国/加拿大:英国时髦鞋类品牌
2018/08/04 全球购物
《夜晚的实验》教学反思
2014/02/19 职场文书
道路交通事故赔偿协议书
2014/10/24 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
2015年小学教导处工作总结
2015/05/26 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
2016年世界人口日宣传活动总结
2016/04/05 职场文书
python获取对象信息的实例详解
2021/07/07 Python
《艾尔登法环》Boss腐烂树灵很有可能是《黑暗之魂3》的一个废案
2022/04/11 其他游戏