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 相关文章推荐
filemanage功能中用到的lib.js
Apr 08 Javascript
javascript据option的value值快速设定初始的selected选项
Aug 13 Javascript
JavaScript Event事件学习第一章 Event介绍
Feb 07 Javascript
分享27款非常棒的jQuery 表单插件
Mar 28 Javascript
javascript实现简单的省市区三级联动
May 14 Javascript
js实现将选中值累加到文本框的方法
Aug 12 Javascript
js闭包引起的事件注册问题介绍
Mar 29 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
Dec 08 Javascript
jquery.zclip轻量级复制失效问题
Jan 08 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
Apr 21 Javascript
jQuery Position方法使用和兼容性
Aug 23 jQuery
引入外部js脚本加载慢与页面白屏问题的解决
Dec 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中文分词 自动获取关键词介绍
2012/11/13 PHP
php过滤html标记属性类用法实例
2014/09/23 PHP
php获取textarea的值并处理回车换行的方法
2014/10/20 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
2016/04/07 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
js单独获取一个checkbox看其是否被选中
2014/09/22 Javascript
node.js express中app.param的用法详解
2017/07/16 Javascript
Vue组件之单向数据流的解决方法
2018/11/10 Javascript
Vue + Scss 动态切换主题颜色实现换肤的示例代码
2020/04/27 Javascript
JS可断点续传文件上传实现代码解析
2020/07/30 Javascript
在Python中测试访问同一数据的竞争条件的方法
2015/04/23 Python
Python中turtle作图示例
2017/11/15 Python
Python中最大最小赋值小技巧(分享)
2017/12/23 Python
python实现多进程代码示例
2018/10/31 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
2020/02/25 Python
Python logging模块handlers用法详解
2020/08/14 Python
美国牛仔品牌:True Religion
2018/11/16 全球购物
Windows和Linux动态库应用异同
2016/04/17 面试题
银行办理业务介绍信
2014/01/18 职场文书
主持词开场白
2014/03/17 职场文书
防灾减灾日活动总结
2014/08/26 职场文书
政府个人对照检查材料
2014/08/28 职场文书
四风问题民主生活会对照检查材料思想汇报
2014/09/27 职场文书
大四学生个人总结
2015/02/15 职场文书
人事行政助理岗位职责
2015/04/11 职场文书
2015年法院工作总结范文
2015/04/28 职场文书
卫生院艾滋病宣传活动总结
2015/05/09 职场文书
建国大业观后感600字
2015/06/01 职场文书
python如何进行基准测试
2021/04/26 Python
企业版Windows 11有哪些新功能? Win11适用于企业的功能介绍
2021/11/21 数码科技
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript