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实现图片渐变切换兼容ie6/Chrome/Firefox
Aug 02 Javascript
JavaScript将页面表格导出为Excel的具体实现
Dec 27 Javascript
JavaScript中读取和保存文件实例
May 08 Javascript
JS获取当前网页大小以及屏幕分辨率等
Sep 05 Javascript
javascript中数组的定义及使用实例
Jan 21 Javascript
JS添加删除DIV的简单实例
Jul 08 Javascript
原生JS仿QQ阅读点击展开、收起效果
Mar 08 Javascript
react开发教程之React 组件之间的通信方式
Aug 12 Javascript
解决Vue 项目打包后favicon无法正常显示的问题
Sep 01 Javascript
JS实现横向轮播图(中级版)
Jan 18 Javascript
js实现3D旋转效果
Aug 18 Javascript
vue3中的组件间通信
Mar 31 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
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
轻松修复Discuz!数据库
2008/05/03 PHP
浅析php中常量,变量的作用域和生存周期
2013/08/10 PHP
php通过sort()函数给数组排序的方法
2015/03/18 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
如何在Laravel之外使用illuminate组件详解
2020/09/20 PHP
javascript下查找父节点的简单方法
2007/08/13 Javascript
效率高的Javscript字符串替换函数的benchmark
2008/08/02 Javascript
异步加载script的代码
2011/01/12 Javascript
jQuery源码分析-03构造jQuery对象-工具函数
2011/11/14 Javascript
jquery下checked取值问题的解决方法
2012/08/09 Javascript
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
js复制网页内容并兼容各主流浏览器的代码
2013/12/17 Javascript
Node.js模拟浏览器文件上传示例
2014/03/26 Javascript
node.js中的url.parse方法使用说明
2014/12/10 Javascript
Jquery中find与each方法用法实例
2015/02/04 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
通过jquery的ajax请求本地的json文件方法
2018/08/08 jQuery
Vue Cli 3项目使用融云IM实现聊天功能的方法
2019/04/19 Javascript
js 判断当前时间是否处于某个一个时间段内
2019/09/19 Javascript
提升Python程序运行效率的6个方法
2015/03/31 Python
Python中使用gzip模块压缩文件的简单教程
2015/04/08 Python
python 链接和操作 memcache方法
2017/03/04 Python
使用Python 正则匹配两个特定字符之间的字符方法
2018/12/24 Python
python scatter散点图用循环分类法加图例
2019/03/19 Python
Python安装与基本数据类型教程详解
2019/05/29 Python
python提取xml里面的链接源码详解
2019/10/15 Python
python函数声明和调用定义及原理详解
2019/12/02 Python
python生成并处理uuid的实现方式
2020/03/03 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
2020/08/20 Python
DAWGS鞋官方网站:鞋,凉鞋,靴子
2016/10/04 全球购物
法人委托书的范本格式
2014/09/11 职场文书
大客户经理岗位职责
2015/04/09 职场文书
2015年纪念“卢沟桥事变”78周年活动方案
2015/05/06 职场文书
2015年园林绿化工作总结
2015/05/23 职场文书
中秋节作文(五年级)之关于月亮
2019/09/11 职场文书