JavaScript 集合概念、结构与应用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JavaScript 集合概念、结构与应用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3947字,纯文字阅读大概需要6分钟。
内容图文
![JavaScript 集合概念、结构与应用](/upload/InfoBanner/zyjiaocheng/612/c927892a117b4a579ce57bd780d5bcad.jpg)
JavaScript 集合概念、结构与应用
前言
什么是集合
集合是由一组无序不重复的项组成。
比如说一个大于或等于0的整数组成的自然数集合: N = { 0,1,2,3,4,5… }。集合中的对象列表使用花括号( {} )包围。
如果一个集合里没有任何元素,那么该集合又被称之为 空集。
创建集合类
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
又因集合里值不会重复,所以我们会在这个类的基础上来实现我们自己的类。
接下来我们先创建该类与它的构造函数。
class Set {
constructor() {
this.items = {};
}
}
之后我们需要声明一些集合可用的方法。
- add(element) : 向集合添加一个元素。
- delete(element) : 从集合移除一个元素。
- has(element) : 判断元素是否存在集合中。
- clear() : 移除集合中的所有元素。
- size() : 返回集合的大小。
- values() : 返回集合内的所有值。
has(element) {
return Object.prototype.hasOwnProperty.call(this.items , element);
}
add(element) {
if ( this.has(element) ) return false;
this.items[element] = element;
return true;
}
delete(element) {
if ( !this.has(element) ) return false;
delete this.items[element];
return true;
}
clear() {
this.items = {};
}
size() {
return Object.keys(this.items).length;
}
values() {
return Object.values(this.items);
}
关于 has 方法,其实还有一种实现方法。
那就是使用 in 运算符来验证给定的元素是否存在于对象中。
has(element) {
return element in this.items;
}
不过推荐的还是原来的那个写法 – hasOwnProperty 方法。
当然不仅仅是 has 方法,size 与 values 方法皆有其他实现的方法。
size() {
let count = 0;
for(let key in this.items) if(this.items.hasOwnProperty(key)) count++;
return count;
}
/**
* values
*/
values() {
let values = [];
for ( let i in this.items ) if ( this.items.hasOwnProperty(key) ) values.push(i);
return values;
}
这里就不过多叙述了。
使用集合类
现在我们的集合类以及构建完成了,让我们来试着使用他吧!
let set = new Set();
set.add(1);// true
set.values();// [1]
set.has(1);// true
set.size();// 1
set.add(3);// true
set.values();// [1,3]
set.has(3);// true
set.size();// 2
set.delete(3);// true
set.values();// [1]
集合运算
这里我们试着为创建的集合类编写 并集,交集,差集与子集等四种函数。
1、并集
什么是并集
并集指的是 : 对于给定两个的集合,返回一个包含两个集合中的所有元素的新集合。
所以我们只需要在代码中,将两个集合类的值遍历后赋给一个新的集合即可。
union(setA,setB){
let unionSet = new Set();
setA.values().forEach(value => unionSet.add(value));
setB.values().forEach(value => unionSet.add(value));
return unionSet;
}
2、交集
什么是交集
交集指的是: 对于给定的两个集合,返回一个包含两个集合中共有元素的新集合。
所以我们可以这样写,拿出两个集合中的一个集合,循环遍历,去排查另外一个集合里是否存在当前循环值。
但是这样写又不太智能。
为什么这样说呢。
假设我们有这么两个集合:
setA = [1,2,3,4,5,6,7]
setB = [4,6]
如果我们要那 setA 去循环迭代,这显然会消耗更多的过程。
所以我们只需要做出一个判定,判定两个集合里哪个集合最小,再用最小的那个集合去迭代匹配。
这样就减少了许多消耗。
intersection(setA,setB){
let intersectionSet = new Set(),
values = setA.values(),
otherValues = setB.values(),
bigSet = values,
smallSet = otherValues;
if ( otherValues.length - values.length > 0 ) {
bigSet = otherValues;
smallSet = otherValues;
}
smallSet.forEach(item => {
if ( bigSet.includes(item) ) intersectionSet.add(item);
})
return intersectionSet;
}
3、差集
什么是差集
差集指的是:对于给定的两个集合,返回一个包含所有存在与第一个集合且不存在于第二个集合的的元素的新集合。
既然这样,那么我们只需要迭代第一个集合的所有元素,没迭代一个不存在于第二个集合里的元素就将其存储到一个新集合里即可。
difference(setA,setB){
let differenceSet = new Set();
setA.values().forEach(val => {
if ( !setB.has(val) ) differenceSet.add(val);
});
return differenceSet;
}
4、子集
什么是子集
子集指的是:验证一个给定的集合里的元素是否全部存在于另一个集合里。
所以我们只需要迭代给定的集合里的所有的元素,去判定是否都存在于另一个集合里即可。
isSubsetOf(setA,setB) {
if ( setA.size() > setB.size() ) return false;
let isSubset = true;
setA.values().every(val =>{
if ( !setB.has(val) ) {
isSubset = false;
return false;
}
return true;
});
return isSubset;
}
内容总结
以上是互联网集市为您收集整理的JavaScript 集合概念、结构与应用全部内容,希望文章能够帮你解决JavaScript 集合概念、结构与应用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。