JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】


Posted in Javascript onFebruary 18, 2019

本文实例讲述了JS实现集合的交集、补集、差集、去重运算。分享给大家供大家参考,具体如下:

ES5写法:

///集合取交集
Array.intersect = function () {
  var result = new Array();
  var obj = {};
  for (var i = 0; i < arguments.length; i++) {
    for (var j = 0; j < arguments[i].length; j++) {
      var str = arguments[i][j];
      if (!obj[str]) {
        obj[str] = 1;
      }
      else {
        obj[str]++;
        if (obj[str] == arguments.length)
        {
          result.push(str);
        }
      }
    }
  }
  return result;
}
//集合去掉重复
Array.prototype.uniquelize = function () {
  var tmp = {},
    ret = [];
  for (var i = 0, j = this.length; i < j; i++) {
    if (!tmp[this[i]]) {
      tmp[this[i]] = 1;
      ret.push(this[i]);
    }
  }
  return ret;
}
//并集
Array.union = function () {
  var arr = new Array();
  var obj = {};
  for (var i = 0; i < arguments.length; i++) {
    for (var j = 0; j < arguments[i].length; j++)
    {
      var str=arguments[i][j];
      if (!obj[str])
      {
        obj[str] = 1;
        arr.push(str);
      }
    }//end for j
  }//end for i
  return arr;
}
//2个集合的差集 在arr不存在
Array.prototype.minus = function (arr) {
  var result = new Array();
  var obj = {};
  for (var i = 0; i < arr.length; i++) {
    obj[arr[i]] = 1;
  }
  for (var j = 0; j < this.length; j++) {
    if (!obj[this[j]])
    {
      obj[this[j]] = 1;
      result.push(this[j]);
    }
  }
  return result;
};
console.log(Array.intersect(["1", "2", "3"], ["2", "3", "4", "5", "6"]));//[2,3]
console.log([1, 2, 3, 2, 3, 4, 5, 6].uniquelize());//[1,2,3,4,5,6]
console.log(Array.union(["1", "2", "3"], ["2", "3", "4", "5", "6"], ["5", "6", "7", "8", "9"]))
console.log(["2", "3", "4", "5", "6"].minus(["1", "2", "3"]));

 使用在线HTML/CSS/JavaScript代码运行工具http://tools.3water.com/code/HtmlJsRun册数上述代码,可得如下运行结果:

JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】

ES6写法:使用构造函数Set

const arr1 = [1,2,3,4];
const arr2 = [3,4,5,6];
const arr3 = [1,2,3,2,1,3,4];
let s1 = new Set(arr1);
let s2 = new Set(arr2);
//并集
let union = [...s1, ...s2];
console.log(union); //[1, 2, 3, 4, 3, 4, 5, 6]
//交集
let intersect = arr1.filter( x => s2.has(x) );
console.log(intersect); //[3, 4]
//差集
let difference = arr1.filter( x => !s2.has(x) );
console.log(difference); //[1, 2]
//去重
let minus = [...new Set(arr3)];
console.log(minus); //[1, 2, 3, 4]

使用在线HTML/CSS/JavaScript代码运行工具http://tools.3water.com/code/HtmlJsRun册数上述代码,可得如下运行结果:

JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Jquery 动态循环输出表格具体方法
Nov 23 Javascript
使用jsonp完美解决跨域问题
Nov 27 Javascript
常见的javascript跨域通信方法
Dec 31 Javascript
ionic 上拉菜单(ActionSheet)实例代码
Jun 06 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
Sep 21 Javascript
JavaScript 身份证号有效验证详解及实例代码
Oct 20 Javascript
JavaScript 控制字体大小设置的方法
Nov 23 Javascript
解析如何利用iframe标签以及js制作时钟
Dec 08 Javascript
Vue实现本地购物车功能
Dec 05 Javascript
Vue项目中ESlint规范示例代码
Jul 04 Javascript
微信小程序在其他页面监听globalData中值的变化
Jul 15 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
Apr 10 Javascript
JS基于开关思想实现的数组去重功能【案例】
Feb 18 #Javascript
JS实现点击li标签弹出对应的索引功能【案例】
Feb 18 #Javascript
Vue框架TypeScript装饰器使用指南小结
Feb 18 #Javascript
深入理解vue-class-component源码阅读
Feb 18 #Javascript
详解TypeScript+Vue 插件 vue-class-component的使用总结
Feb 18 #Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
Feb 18 #jQuery
详解ES7 Decorator 入门解析
Feb 18 #Javascript
You might like
谈谈新手如何学习PHP
2006/12/14 PHP
PHP 一个页面执行时间类代码
2010/03/05 PHP
PHP中数组的分组排序实例
2014/06/01 PHP
PHP cookie与session会话基本用法实例分析
2019/11/18 PHP
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
jq选项卡鼠标延迟的插件实例
2013/05/13 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
原生js获取宽高与jquery获取宽高的方法关系对比
2014/04/04 Javascript
jquery 选取方法都有哪些
2014/05/18 Javascript
javascript实现的固定位置悬浮窗口实例
2015/04/30 Javascript
AngularJS中的过滤器使用详解
2015/06/16 Javascript
jquery获取css的color值返回RGB的方法
2015/12/18 Javascript
jQuery each函数源码分析
2016/05/25 Javascript
JS实现兼容火狐及IE iframe onload属性的遮罩层隐藏及显示效果
2016/08/23 Javascript
深入理解Vue2.x的虚拟DOM diff原理
2017/09/27 Javascript
jQuery实现的老虎机跑动效果示例
2018/12/29 jQuery
在vue中使用jsx语法的使用方法
2019/09/30 Javascript
[58:09]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第三场 6.2
2018/06/03 DOTA
Python函数式编程指南(四):生成器详解
2015/06/24 Python
深入解读Python解析XML的几种方式
2016/02/16 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
PyTorch中Tensor的数据统计示例
2020/02/17 Python
python 实现弹球游戏的示例代码
2020/11/17 Python
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
2013/01/09 HTML / CSS
canvas实现图片镜像翻转的2种方式
2020/07/22 HTML / CSS
英国领先的运动营养品牌:Protein Dynamix
2018/01/02 全球购物
New delete 与malloc free 的联系与区别
2013/02/04 面试题
北京振戎融通Java面试题
2015/09/03 面试题
项目经理岗位职责
2013/11/11 职场文书
幼教毕业生自我鉴定
2014/01/12 职场文书
不打扫卫生检讨书
2014/02/12 职场文书
关于旅游的活动方案
2014/08/15 职场文书
迁户口计划生育证明
2014/10/19 职场文书
自主招生推荐信格式模板
2015/03/24 职场文书
2015年节能降耗工作总结
2015/05/22 职场文书
职场领导同事生日简短祝福语
2019/08/06 职场文书