摘要:读书笔记实现集合目标学习如何创建集合,添加移除值搜索是否存在学习如何做并集交集差集的数据操作学习如何使用的类集合是无顺序不重复的的项组成的数据结构。
读书笔记-JavaScript实现「集合」
目标
学习如何创建集合,添加、移除值、搜索是否存在
学习如何做并集、交集、差集的数据操作
学习如何使用 ES6 的 Set 类
集合是无顺序、不重复的的项组成的数据结构。与数学中的有限集合是通过一个概念
ES6 原生的 Set 就是「集合」,原生的 Map 就是「字典」
6.2 实现与 ES6 的 Set 相似的一个集合结构function Set() {
let items = {};
this.has = function(value) {
// 根据in操作符不同,hasOwenProperty只检测自有属性,忽略原型链
return items.hasOwnProperty(value);
};
this.add = function(value) {
if (!this.has(value)) {
items[value] = value;
return true;
} else {
return false;
}
};
this.remove = function(value) {
if (this.has(value)) {
delete items[value];
return true;
}
return false;
};
this.clear = function() {
items = {};
};
this.size = function() {
return Object.keys(items).length;
};
this.values = function() {
return Object.values(items);
};
// 并集操作
this.union = function(otherSet) {
let unionSet = new Set();
this.values().forEach(value => {
unionSet.add(value);
});
// 因为add时,会用has判断,是否重复的元素不再push
otherSet.values().forEach(value => {
unionSet.add(value);
});
return unionSet;
};
// 交集操作
this.intersection = function(otherSet) {
let intersectionSet = new Set();
this.values().forEach(value => {
if (otherSet.has(value)) {
unionSet.add(value);
}
});
return intersectionSet;
};
// 判断A是否是B的子集
this.subset = function(otherSet) {
return this.values().every(value => {
return otherSet.has(value);
});
};
}
试一试,代码能否正常运行
let set = new Set(); set.add(1); console.log(set.values()); console.log(set.has(1)); console.log(set.size()); set.add(2); console.log(set.values()); console.log(set.has(2)); console.log(set.size()); set.remove(1); console.log(set.values()); set.remove(2); console.log(set.values());拓展集合操作 并集、交集、差集
并集操作
// 并集操作
this.union = function(otherSet) {
let unionSet = new Set();
this.values().forEach(value => {
unionSet.add(value);
});
// 因为add时,会用has判断,是否重复的元素不再push
otherSet.values().forEach(value => {
unionSet.add(value);
});
return unionSet;
};
试一试,代码做了并集操作
let set1 = new Set(); set1.add(1); let set2 = new Set(); set1.add(2); console.log(set1.union(set2).values());
交集操作
this.intersection = function(otherSet) {
let intersectionSet = new Set();
this.values().forEach(value => {
if (otherSet.has(value)) {
unionSet.add(value);
}
});
return intersectionSet;
};
试一试,是否实现了交集操作
let set1 = new Set(); set1.add(1); set1.add(2); let set2 = new Set(); set2.add(2); console.log(set1.values()); console.log(set2.values()); console.log(set1.intersection(set2).values());
差集操作
// 差集
this.difference = function(otherSet) {
let differenceSet = new Set();
this.values().forEach(value => {
if (!otherSet.has(value)) {
differenceSet.add(value);
}
});
return differenceSet;
};
试一试,是否实现了差集操作
let set1 = new Set(); set1.add(1); set1.add(2); let set2 = new Set(); set2.add(2); console.log(set1.values()); console.log(set2.values()); console.log(set1.difference(set2).values());
判断是否是子集的操作
// 判断是否是子集的操作
this.subset = function(otherSet) {
return this.values().every(value => {
return otherSet.has(value);
});
};
试一试,是否实现了判断子集操作
let set1 = new Set(); set1.add(1); let set2 = new Set(); set2.add(1); set2.add(2); console.log(set1.values()); console.log(set2.values()); console.log(set1.subset(set2));
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/108714.html
摘要:集合是由一组无序且唯一的的项组成的方法描述备注向集合添加一个新的项从集合移除一个项判断集合中是否存在某项移除集合中所有项返回集合中所有值组成的数组返回集合所包含元素的数量交集并集差集子集的实现差集对于给定的两个集合,返回一个包含所有存在于第 集合是由一组无序且唯一的的项组成的 function Set(){ let item = {}; this.has = funct...
摘要:笔者作为一位,将工作以来用到的各种优秀资料神器及框架整理在此,毕竟好记性不如烂键盘,此前端知识点大百科全书前端掘金,,不定期更新技巧前端掘金技巧,偶尔更新。计算数组的极值技巧使你的更加专业前端掘金一个帮你提升技巧的收藏集。 CSS 样式画各种图形 - 前端 - 掘金下面是一些我在 CSS 中经常用到的图案,还有一些是在css-tricks看到的。记录一下,以后会用到。会持续更新… 一、...
摘要:笔者作为一位,将工作以来用到的各种优秀资料神器及框架整理在此,毕竟好记性不如烂键盘,此前端知识点大百科全书前端掘金,,不定期更新技巧前端掘金技巧,偶尔更新。计算数组的极值技巧使你的更加专业前端掘金一个帮你提升技巧的收藏集。 CSS 样式画各种图形 - 前端 - 掘金下面是一些我在 CSS 中经常用到的图案,还有一些是在css-tricks看到的。记录一下,以后会用到。会持续更新… 一、...
阅读 3969·2021-09-09 09:33
阅读 3219·2019-08-30 15:56
阅读 3231·2019-08-30 15:56
阅读 3496·2019-08-30 15:55
阅读 621·2019-08-30 15:53
阅读 2310·2019-08-30 15:52
阅读 808·2019-08-28 18:16
阅读 2658·2019-08-26 13:51