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 相关文章推荐
JavaScript 中的事件教程
Apr 05 Javascript
非阻塞动态加载javascript广告实现代码
Nov 17 Javascript
jQuery实现form表单reset按钮重置清空表单功能
Dec 18 Javascript
使用闭包对setTimeout进行简单封装避免出错
Jul 10 Javascript
jQuery 隐藏和显示 input 默认值示例
Jun 03 Javascript
JavaScript中的Math.atan2()方法使用详解
Jun 15 Javascript
js贪吃蛇网页版游戏特效代码分享(挑战十关)
Aug 24 Javascript
浅谈JavaScript 中有关时间对象的方法
Aug 15 Javascript
Bootstrap模态框插件使用详解
May 11 Javascript
微信小程序仿朋友圈发布动态功能
Jul 15 Javascript
详解基于Vue2.0实现的移动端弹窗(Alert, Confirm, Toast)组件
Aug 02 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
May 22 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(4) php 函数 补充2
2010/02/15 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
2013/06/27 PHP
基于php和mysql的简单的dao类实现crud操作功能
2014/01/27 PHP
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
屏蔽PHP默认设置中的Notice警告的方法
2016/05/20 PHP
PHP实现负载均衡的加权轮询方法分析
2018/08/22 PHP
PHP中Static(静态)关键字功能与用法实例分析
2019/04/05 PHP
iframe 自适应高度[在IE6 IE7 FF下测试通过]
2009/04/13 Javascript
Javascript select下拉框操作常用方法
2009/11/09 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
JavaScript的setAttribute兼容性问题解决方法
2013/11/11 Javascript
JavaScript设置获取和设置属性的方法
2015/03/04 Javascript
JavaScript中的getDay()方法使用详解
2015/06/09 Javascript
Javascript中replace()小结
2015/09/30 Javascript
Bootstrap插件全集
2016/07/18 Javascript
jQuery手指滑动轮播效果
2016/12/22 Javascript
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
2017/09/21 Javascript
详解使用Typescript开发node.js项目(简单的环境配置)
2017/10/09 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
如何优雅地取消 JavaScript 异步任务
2020/03/22 Javascript
[10:14]2018DOTA2国际邀请赛寻真——paiN Gaming不仅为自己而战
2018/08/14 DOTA
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
解决Python 遍历字典时删除元素报异常的问题
2016/09/11 Python
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
Python3+selenium实现cookie免密登录的示例代码
2020/03/18 Python
Django实现从数据库中获取到的数据转换为dict
2020/03/27 Python
Pycharm连接gitlab实现过程图解
2020/09/01 Python
HTML5 audio标签使用js进行播放控制实例
2015/04/24 HTML / CSS
保加利亚服装和鞋类购物网站:Bibloo.bg
2020/11/08 全球购物
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
如何提高JDBC的性能
2013/04/30 面试题
新手上路标语
2014/06/20 职场文书
学习雷锋标语
2014/06/25 职场文书
感恩的心主题班会
2015/08/12 职场文书
七年级作文(600字3篇)
2019/09/24 职场文书
R9700摩机记
2022/04/05 无线电