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 相关文章推荐
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
May 21 Javascript
extjs 时间范围选择自动判断的实现代码
Jun 24 Javascript
js中函数调用的两种常用方法使用介绍
Jul 17 Javascript
javascript在IE下trim函数无法使用的解决方法
Sep 12 Javascript
关于JavaScript的变量的数据类型的判断方法
Aug 14 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
Jan 28 Javascript
使用jQuery实现Web页面换肤功能的要点解析
May 12 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
Nov 25 Javascript
Bootstrap CSS布局之表格
Dec 17 Javascript
JavaScript实现鼠标滚轮控制页面图片切换功能示例
Oct 14 Javascript
babel之配置文件.babelrc入门详解
Feb 22 Javascript
JavaScript迭代器的含义及用法
Jun 21 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
法压式咖啡之制作法
2021/03/03 冲泡冲煮
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
php实现过滤表单提交中html标签的方法
2014/10/17 PHP
Yii分页用法实例详解
2014/12/04 PHP
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
php递归创建目录的方法
2015/02/02 PHP
php使用Imagick生成图片的方法
2015/07/31 PHP
基于php实现七牛抓取远程图片
2015/12/01 PHP
语义化 H1 标签
2008/01/14 Javascript
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
javaScript 利用闭包模拟对象的私有属性
2011/12/29 Javascript
js使用心得分享
2015/01/13 Javascript
理解javascript中的with关键字
2016/02/15 Javascript
javascript中异常处理案例(推荐)
2016/10/03 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
2016/11/20 Javascript
JavaScript 事件对内存和性能的影响
2017/01/22 Javascript
详解Vue2.0 事件派发与接收
2017/09/05 Javascript
基于Axios 常用的请求方法别名(详解)
2018/03/13 Javascript
Vue3.x源码调试的实现方法
2019/10/13 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
2019/10/26 Javascript
[01:22:10]Ti4 循环赛第二日 DK vs Empire
2014/07/11 DOTA
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
python 排序算法总结及实例详解
2016/09/28 Python
Python爬虫中urllib库的进阶学习
2018/01/05 Python
详解TensorFlow在windows上安装与简单示例
2018/03/05 Python
Python 输入一个数字判断成绩分数等级的方法
2018/11/15 Python
文件上传服务器-jupyter 中python解压及压缩方式
2020/04/22 Python
Python中有几个关键字
2020/06/04 Python
python求numpy中array按列非零元素的平均值案例
2020/06/08 Python
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
人事行政主管岗位职责
2013/12/22 职场文书
超市国庆节促销方案
2014/02/20 职场文书
关于运动会广播稿300字
2014/10/05 职场文书
校车安全管理责任书
2015/05/11 职场文书
干货:如何写好观后感 !
2019/05/21 职场文书
Go调用Rust方法及外部函数接口前置
2022/06/14 Golang