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的gamequery插件做JS乒乓球游戏
Jul 31 Javascript
html中table数据排序的js代码
Aug 09 Javascript
利用JS来控制键盘的上下左右键(示例代码)
Dec 14 Javascript
node.js使用require()函数加载模块
Nov 26 Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
Dec 12 Javascript
jQuery on()方法示例及jquery on()方法的优点
Aug 27 Javascript
浅谈使用MVC模式进行JavaScript程序开发
Nov 10 Javascript
JavaScript中rem布局在react中的应用
Dec 09 Javascript
livereload工具实现前端可视化开发【推荐】
Dec 23 Javascript
深入理解Javascript箭头函数中的this
Feb 13 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
Jan 30 Javascript
Vue.set 全局操作简单示例
Sep 19 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 Coding Tips(php小技巧)[2011/04/02最后更新]
2011/05/02 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
js写的评论分页(还不错)
2013/12/23 Javascript
JS访问SWF的函数用法实例
2015/07/01 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
浅谈js函数三种定义方式 &amp; 四种调用方式 &amp; 调用顺序
2017/02/19 Javascript
Vue.2.0.5过渡效果使用技巧
2017/03/16 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
2017/04/21 jQuery
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
2017/08/30 Javascript
Vue 换肤的示例实践
2018/01/23 Javascript
微信小程序保存多张图片的实现方法
2019/03/05 Javascript
微信小程序封装的HTTP请求示例【附升级版】
2019/05/11 Javascript
element form 校验数组每一项实例代码
2019/10/10 Javascript
vuex state中的数组变化监听实例
2019/11/06 Javascript
使用webpack搭建vue环境的教程详解
2019/12/31 Javascript
VUE实现自身整体组件销毁的示例代码
2020/01/13 Javascript
vue-quill-editor的使用及个性化定制操作
2020/08/04 Javascript
[01:50]《我与DAC》之玩家:iG夺冠时的那面红旗
2018/03/29 DOTA
python统计文本字符串里单词出现频率的方法
2015/05/26 Python
python登录豆瓣并发帖的方法
2015/07/08 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
Django实现文件上传下载
2019/10/06 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
python 将Excel转Word的示例
2021/03/02 Python
高三自我鉴定
2013/10/23 职场文书
乡镇党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
护士年终考核评语
2014/12/31 职场文书
退休教师欢送会致辞
2015/07/31 职场文书
公司岗位说明书
2015/10/08 职场文书
党员反四风学习心得体会
2016/01/22 职场文书
Python中Schedule模块使用详解 周期任务神器
2022/04/19 Python