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 相关文章推荐
Dom 是什么的详细说明
Oct 25 Javascript
jquery入门——事件机制之事件中的冒泡现象示例解释
Sep 12 Javascript
Js判断CSS文件加载完毕的具体实现
Jan 17 Javascript
Express作者TJ告别Node.js奔向Go
Jul 14 Javascript
jQuery实现获取元素索引值index的方法
Sep 18 Javascript
使用Node.js给图片加水印的方法
Nov 15 Javascript
JS判断微信扫码的方法
Aug 07 Javascript
使用jQuery实现简单的tab框实例
Aug 22 jQuery
jQuery+koa2实现简单的Ajax请求的示例
Mar 06 jQuery
Vue中computed与methods的区别详解
Mar 24 Javascript
JS实现数组去重及数组内对象去重功能示例
Feb 02 Javascript
JS常见内存泄漏及解决方案解析
May 30 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
用文本文件制作留言板提示(下)
2006/10/09 PHP
在PHP中使用与Perl兼容的正则表达式
2006/11/26 PHP
用PHP编写和读取XML的几种方式
2013/01/12 PHP
php计算多维数组中所有值总和的方法
2015/06/24 PHP
Codeigniter控制器controller继承问题实例分析
2016/01/19 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
php使用crypt()函数进行加密
2017/06/08 PHP
javascript的trim,ltrim,rtrim自定义函数
2008/09/21 Javascript
js css样式操作代码(批量操作)
2009/10/09 Javascript
js+HTML5基于过滤器从摄像头中捕获视频的方法
2015/06/16 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
jQuery获取单击节点对象的方法
2016/06/02 Javascript
JavaScript中removeChild 方法开发示例代码
2016/08/15 Javascript
Vue.js第三天学习笔记(计算属性computed)
2016/12/01 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
jquery Form轻松实现文件上传
2017/05/24 jQuery
JavaScript基础之流程控制语句的用法
2017/08/31 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
2019/06/04 Javascript
独立部署小程序基于nodejs的服务器过程详解
2019/06/24 NodeJs
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
使用Python程序抓取新浪在国内的所有IP的教程
2015/05/04 Python
Python基于回溯法子集树模板解决全排列问题示例
2017/09/07 Python
python 杀死自身进程的实现方法
2019/07/01 Python
python-序列解包(对可迭代元素的快速取值方法)
2019/08/24 Python
tensorboard显示空白的解决
2020/02/15 Python
HMV日本官网:全球知名的音乐、DVD和电脑游戏零售巨头
2016/08/13 全球购物
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
高校学生干部的自我评价分享
2013/11/04 职场文书
自我鉴定怎么写
2014/01/12 职场文书
常务副总经理岗位职责
2014/04/12 职场文书
会计试用期自我评价怎么写
2014/09/18 职场文书
公司授权委托书
2014/10/17 职场文书
电影建党伟业观后感
2015/06/01 职场文书
护理自荐信
2019/05/14 职场文书
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers
微信小程序 WeUI扩展组件库的入门教程
2022/04/21 Javascript