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 相关文章推荐
Firefox下提示illegal character并出现乱码的原因
Mar 25 Javascript
js中的前绑定和后绑定详解
Aug 01 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
Aug 18 Javascript
Javascript模仿淘宝信用评价实例(附源码)
Nov 26 Javascript
利用js获取下拉框中所选的值
Dec 01 Javascript
js实现符合国情的日期插件详解
Jan 19 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
May 11 Javascript
Bootstrap fileinput文件上传预览插件使用详解
May 16 Javascript
JS中Map和ForEach的区别
Feb 05 Javascript
Vue 实例事件简单示例
Sep 19 Javascript
javascript 内存模型实例详解
Apr 18 Javascript
linux服务器快速卸载安装node环境(简单上手)
Feb 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
Yii2实现上下联动下拉框功能的方法
2016/08/10 PHP
php安装dblib扩展,连接mssql的具体步骤
2017/03/02 PHP
jQuery的选择器中的通配符使用介绍
2014/03/20 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
2014/06/15 Javascript
javascript操作数组详解
2014/12/17 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
2016/05/09 Javascript
JavaScript ES6的新特性使用新方法定义Class
2016/06/28 Javascript
js is_valid_filename验证文件名的函数
2017/07/19 Javascript
手机注册发送验证码倒计时的简单实例
2017/11/15 Javascript
五步轻松实现JavaScript HTML时钟效果
2020/03/25 Javascript
详解webpack4之splitchunksPlugin代码包分拆
2018/12/04 Javascript
[46:27]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第一局
2016/03/02 DOTA
[09:31]2016国际邀请赛中国区预选赛Yao赛后采访 答题送礼
2016/06/27 DOTA
[48:27]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
Python实现监控程序执行时间并将其写入日志的方法
2015/06/30 Python
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
Python利用Django如何写restful api接口详解
2018/06/08 Python
python中reader的next用法
2018/07/24 Python
Python supervisor强大的进程管理工具的使用
2019/04/24 Python
Python实现图片识别加翻译功能
2019/12/26 Python
浅谈python之自动化运维(Paramiko)
2020/01/31 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
浅谈python输出列表元素的所有排列形式
2020/02/26 Python
解决keras使用cov1D函数的输入问题
2020/06/29 Python
Python3爬虫中Ajax的用法
2020/07/10 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
python 对xml解析的示例
2021/02/27 Python
美国知名女性服饰品牌:New York & Company
2017/03/23 全球购物
美国克罗格超市在线购物:Kroger
2019/06/21 全球购物
华硕新加坡官方网上商店:ASUS Singapore
2020/07/09 全球购物
JDBC操作数据库的基本流程是什么
2014/10/28 面试题
学校读书活动总结
2014/06/30 职场文书
党的群众路线个人对照检查材料
2014/09/23 职场文书
满月酒邀请函
2015/01/30 职场文书
工作感想范文
2015/08/07 职场文书
收音机爱好者玩机13年,简评其使用过的19台收音机
2022/04/30 无线电