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下arguments,caller,callee,call,apply示例及理解
Dec 24 Javascript
jquery.combobox中文api和例子,修复了上面的小bug
Mar 28 Javascript
javascript控制在光标位置插入文字适合表情的插入
Jun 09 Javascript
浅析基于WEB前端页面的页面内容搜索的实现思路
Jun 10 Javascript
如何在MVC应用程序中使用Jquery
Nov 17 Javascript
JavaScript定时显示广告代码分享
Mar 02 Javascript
超级简单实现JavaScript MVC 样式框架
Mar 24 Javascript
JS键盘版计算器的制作方法
Dec 03 Javascript
ionic中列表项增加和删除的实现方法
Jan 22 Javascript
VUE 配置vue-devtools调试工具及安装方法
Sep 30 Javascript
vue实现添加与删除图书功能
Oct 07 Javascript
Ajax实现页面无刷新留言效果
Mar 24 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中的字符串函数
2006/10/09 PHP
php 生成随机验证码图片代码
2010/02/08 PHP
php数组去重复数据示例
2014/02/25 PHP
php实现复制移动文件的方法
2015/07/29 PHP
CI框架无限级分类+递归的实现代码
2016/11/01 PHP
PHP AjaxForm提交图片上传并显示图片源码
2016/11/29 PHP
PHP数据库操作三:redis用法分析
2017/08/16 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
2018/09/04 PHP
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
js写的评论分页(还不错)
2013/12/23 Javascript
JavaScript数组迭代器实例分析
2015/06/09 Javascript
javascript中$(function() {});写与不写有哪些区别
2015/08/10 Javascript
JSON与JS对象的区别与对比
2017/03/01 Javascript
js实现3D图片展示效果
2017/03/09 Javascript
webpack 2的react开发配置实例代码
2017/07/28 Javascript
在 Vue.js中优雅地使用全局事件的方法
2019/02/01 Javascript
jQuery事件多次绑定与解绑问题实例分析
2019/02/19 jQuery
React 全自动数据表格组件——BodeGrid的实现思路
2019/06/12 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
JS实现省市县三级下拉联动
2020/04/10 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
[02:17]DOTA2亚洲邀请赛 RAVE战队出场宣传片
2015/02/07 DOTA
[54:29]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第二场
2018/04/09 DOTA
python正则分组的应用
2013/11/10 Python
Django中几种重定向方法
2015/04/28 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
pytorch常见的Tensor类型详解
2020/01/15 Python
Python JSON常用编解码方法代码实例
2020/09/05 Python
Numpy实现卷积神经网络(CNN)的示例
2020/10/09 Python
德国、奥地利和瑞士最大的旅行和度假门户网站:HolidayCheck
2019/11/14 全球购物
小学生自我评价范文
2014/01/25 职场文书
学徒工职责
2014/03/06 职场文书
2014年少先队工作总结
2014/12/03 职场文书
小学教师年度个人总结
2015/02/05 职场文书