ES6 Set集合用法
来源:互联网 发布:移动占号软件 编辑:程序博客网 时间:2024/05/27 14:13
场景:
近期在开发一个桌面的收银系统,开发过程中遇到这个一个问题,在用户购买完产品之后选择使用购物卡进行支付的时候,由于购物卡分很多种类,包括通用,酒水卡,日用品卡(类似优惠券的使用范围限制的问题),如何判断用户购买的产品是否可以使用当前的购物卡进行支付呢?
首先想到的是使用集合的概念,就是ES6里面的Set结构。
集合是什么意思?
集合(Set)是由一组无序但彼此之间又有一定关系性的成员构成,每个成员在集合中只能出现一次,不同于我们之前说的字典,链表之类的,它是一种包含了不同元素的数据结构。
对于集合的常见操作有在中学里面学到的交,并,补,子集,空集等概念。
交集:将两个集合中共同存在的成员组成的一个新的集合
并集:将两个集合中的成员进行合并,得到一个新的集合
补集:属于一个集合而不属于另一个集合的成员组成的新的集合
子集:一个集合(A)内的所有元素等同于另一个集合(B)或者能够在另一个集合(B)里面找到该集合的所有元素,那么这个集合(A)就是集合(B)的子集
1.如何定义一个集合?
let s = new Set() ;[ 2 , 3 , 5 , 4 , 5 , 2 ].foreach( x => s.add(x) ) ;console.log(s)//(2,3,4,5)
2.交,并,补操作
let a = new Set([1, 2, 3]);let b = new Set([3, 5, 2]);// 并集let unionSet = new Set([...a, ...b]);console.log("并集",unionSet)//[1,2,3,5]// 交集let intersectionSet = new Set([...a].filter(x => b.has(x)));console.log("交集",intersectionSet)// [2,3]// ab差集let differenceABSet = new Set([...a].filter(x => !b.has(x)));console.log("差集",differenceABSet)// [1]
3.子集,根据上面子集的定义,那么如何判断a是不是b的子集呢?
A:假如a和b的并集没有产生新的元素,即unionSet.size == a.size || unionSet.size == b.size,那么说明a是b的子集。
B:遍历所有的a集合,判断b集合里面是否有a的所有成员,如果有那么说明a是b的子集。
//A 假设判断a是不是b的子集if(unionSet.size == b.size) console.log('a是b的子集') }//Blet flag = false;for(let item of b.values()){ if(a.has(item)){ flag = true; }}if (flag) { console.log('a是b的子集')}else { console.log('a不是b的子集')}笔者认为这里采用方法A效率更高,当集合元素变得很多的时候,采用遍历的方法效率就会降低。如果有其他更好的方法,欢迎提出。
附:
set的属性和方法:
1.Set.prototype.constructor:构造函数,默认就是Set函数;
2.Set.prototype.size:返回Set实例的成员总数。
Set实例的方法:
1.add(value):添加某个值,返回Set结构本身。
2.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
3.has(value):返回一个布尔值,表示该值是否为Set的成员。
4.clear():清除所有成员,没有返回值。
Set遍历的方法:
1.keys():返回键名的遍历器
2.values():返回键值的遍历器
3.entries(),返回键值对的遍历器
4.clear():使用回调函数遍历每个成员
- ES6 Set集合用法
- ES6--set集合和WeakSet集合
- ES6中的Set和Map集合
- ES6中的Set和Map集合
- set集合容器用法
- set集合容器用法
- 集合:set用法;
- python中set集合用法
- ES6 set
- ES6(Set)
- es6 Set
- es6 set
- ES6学习——集合(Collections):Set API
- ES6学习——集合(Collections):Set 应用示例
- 集合的实现3--ES6的set类型
- C++ STL set集合容器常用用法
- C++ STL set集合容器常用用法
- Python中set(集合)的用法
- 牛客练习赛8
- 关于微信认证--个体工商户中之认证联系人
- 初始化列表
- 为你节省时间和挫败感
- js访问java对象
- ES6 Set集合用法
- 考题篇(5.4) NSE4 02. 日志与监控 ❀ 飞塔 (Fortinet) 网络安全专家
- kde- Kernel Density Estimation算法matlab源码
- deepimd_lab 运行 cgame.map 和 cgame.qvm以及其它类似文件的依赖的东西
- windows下安装Python虚拟环境virtualenvwrapper-win
- JavaScript forEach()遍历函数使用及介绍
- OPNET中sink module
- 文件的存取
- MySQL插入或者读取中文数据的时候出现乱码总结