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 相关文章推荐
在Z-Blog中运行代码[html][/html](纯JS版)
Mar 25 Javascript
记录几个javascript有关的小细节
Apr 02 Javascript
jQuery开发者都需要知道的5个小技巧
Jan 08 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
Apr 16 Javascript
jquery自定义属性(类型/属性值)
May 21 Javascript
JavaScript实现简单图片滚动附源码下载
Jun 17 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
Jun 14 Javascript
AngularJS实现星星等级评分功能
Sep 24 Javascript
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
Mar 13 Javascript
VueJS实现用户管理系统
May 29 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
Jul 22 Javascript
Vue h函数的使用详解
Feb 18 Vue.js
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中GET变量的使用
2006/10/09 PHP
坏狼的PHP学习教程之第1天
2008/06/15 PHP
写出高质量的PHP程序
2012/02/04 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
2020/11/10 PHP
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
2012/02/11 Javascript
控制台报错object is not a function的解决方法
2014/08/24 Javascript
深入理解javascript构造函数和原型对象
2014/09/23 Javascript
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
2015/03/16 Javascript
基于jquery实现在线选座订座之影院篇
2015/08/24 Javascript
js实现超简单的展开、折叠目录代码
2015/08/28 Javascript
js实现可控制左右方向的无缝滚动效果
2016/05/29 Javascript
BootStrap使用popover插件实现鼠标经过显示并保持显示框
2016/06/23 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
Bootstrap模态框使用详解
2017/02/15 Javascript
推荐三款不错的图片压缩上传插件(webuploader、localResizeIMG4、LUploader)
2017/04/21 Javascript
vue通过watch对input做字数限定的方法
2017/07/13 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
vue axios post发送复杂对象问题
2019/06/04 Javascript
浅谈一个webpack构建速度优化误区
2019/06/24 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
2020/11/19 Vue.js
[01:00]DOTA2 store: Collection of Artisan's Wonders
2015/08/12 DOTA
python使用Queue在多个子进程间交换数据的方法
2015/04/18 Python
使用requests库制作Python爬虫
2018/03/25 Python
Opencv+Python 色彩通道拆分及合并的示例
2018/12/08 Python
写演讲稿所需要注意的4个条件
2014/01/09 职场文书
电大毕业个人生自我鉴定
2014/03/26 职场文书
合同协议书格式
2014/04/18 职场文书
2015大学迎新晚会策划书
2015/07/16 职场文书
2015年音乐教研组工作总结
2015/07/22 职场文书
《神奇的鸟岛》教学反思
2016/02/22 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书
Django如何创作一个简单的最小程序
2021/05/12 Python
详解thinkphp的Auth类认证
2021/05/28 PHP