摘要:我对集合的学习第一步知道相关概念集合是由一组无序且唯一的项组成的,在中已经实现了类似的类。就是集合第二步实现相关操作方法首先实现方法,判断值是否在集合中,返回布尔值。操作符还有另外一种实现方法,方法返回表明一个对象是否具有特定属性的布尔值。
我对集合的学习 第一步知道相关概念
集合是由一组无序且唯一的项组成的,在ES6中已经实现了类似的Set类。
function Set() { var items = {}; //items就是集合 }第二步实现相关操作方法
首先实现has(value)方法,判断值是否在集合中,返回布尔值。因为集合是不允许重复元素存在的,其他方法调用这个方法判断是否值已存在。
this.has = function(value) { return value in items; //in操作符 };
还有另外一种实现方法,hasOwnProperty()方法返回表明一个对象是否具有特定属性的布尔值。
this.has = function(value) { return items.hasOwnProperty(value); };
接下来实现add()方法,向集合中添加一个新的项。
this.add = function(value) { if(!this.has(value)) { //判断要添加的元素是否已经存在 items[value] = value; //注意同时作为键和值保存,有利于查找这个值 return true; } return false; //添加的元素已经存在,不再添加 };
接下来实现remove()方法,从集合中移除一个值。
this.remove = function(value) { if(this.has(value)) { delete items[value]; //删除对象的属性 return true; } return false; };
接下来实现clear()方法,移除集合所有值。
this.clear = function() { items = {}; //空对象重新赋值给它 };
接下来实现size()方法,返回集合中有多少项。
第一种实现方法,使用一个length变量
第二种实现方法,使用Object.keys()
this.size = function() { return Object.keys(items).length; //返回一个对象的所有可枚举的属性名组成的数组,但不包括原型中的属性,也不能保证按照顺序输出属性名 };
第三种实现方法,手动提取items对象的每一个属性,记录个数
this.size = function() { var count = 0; for(var prop in items) { //遍历items的所有属性 if(items.hasOwnProperty(prop)) { //防止计数时计算到原型的属性 ++count; } } return count; };
实现values()方法,返回所有值组成的数组。
this.values = function() { return Object.keys(items); //获得键也就获得了值(因为他们一样啊) };第三步简单使用Set类
var set = new Set(); set.add(1); console.log(set.values()); //["1"] console.log(set.has(1)); //true console.log(set.size()); //1 set.add(2); console.log(set.values()); //["1", "2"] set.remove(1); console.log(set.values()); //["2"]第四步操作集合
并集:两个集合,返回一个包含两个集合中所有元素的新集合
可以用来合并两个元素,而且保证了单一性。
this.union = function(otherSet) { var unionSet = new Set(); //并集结果 var values = this.values(); for(var i = 0; i < values.length; i++) { //遍历第一个集合全部放到新集合 unionSet.add(values[i]); } values = otherSet.values(); for(var i = 0; i < values.length; i++) { //遍历第二个集合全部放到新集合,使用了add方法保证了单一性 unionSet.add(values[i]); } return unionSet; }
交集:两个集合,返回一个包含两个集合中共有元素的新集合
可以用来取两者共有的部分。
this.intersection = function(otherSet) { var intersectionSet = new Set(); var values = this.values(); for(var i = 0; i < values.length; i++) { if(otherSet.has(values[i])) { intersectionSet.add(values[i]) } } return intersectionSet; }
差集:元素存在于A且不存在于B中
this.difference = functiong(otherSet) { var differenceSet = new Set(); var values = this.values(); for(var i = 0; i < values.length; i++) { //遍历了A if(!otherSet.has(values[i])) { differenceSet.add(values[i]); } } return differenceSet; }
子集:A中的每一个元素都在B中
this.subset = function(otherSet) { if(this.size() > otherSet.size()) return false; var values = this.values(); for(var i = 0; i < values.length; i++) { if(!otherSet.has(values[i])) { //只要有一个A中的元素不在B中,返回false return false; } } return true; }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/82137.html
摘要:我对字典的简单学习字典的概念集合字典和散列表都可以来存储不重复的值。字典也被称为映射。中有集合类的实现,也有字典类的实现。相关操作方法实现方法,判断某个键值是否在这个字典中,有则返回。实现方法,将字典所有的值以数组的形式返回。 我对JS字典的简单学习 字典的概念 集合、字典和散列表都可以来存储不重复的值。在集合中我们使用[值,值]来保存,在字典和散列表中使用[键,值]来存储数据。 字典...
摘要:我对栈的学习因为是个新手,所以都是最简单的知识学习梳理。栈是一种遵从后进先出原则的有序集合,新添加的或者待删除的元素都保留在栈的末尾,称作栈顶,另一端叫做栈底。栈的学习栈的创建创建一个类来表示栈。对于栈来说只能用和方法来进行添加和删除元素。 我对栈的学习 因为是个新手,所以都是最简单的知识学习梳理。 什么是栈 数组是计算机科学中最常用的数据结构,是数据元素的集合。有时候我们需要一种添加...
摘要:我对链表的学习什么是链表要存储多个元素,数组可能是最常用的数据结构。链表的学习创建一个链表各种方法表示要加入列表的项,它包含一个属性以及一个属性,表示要添加到列表的值,表示指向列表下一个节点项的指针。 我对JS链表的学习 什么是链表 要存储多个元素,数组可能是最常用的数据结构。这种数据结构非常方便,但是有一个缺点:从数组的起点或者中间插入或移除项的成本非常高,因为需要移动元素(比如你插...
摘要:对散列表的简单学习类也叫类,是类的一种散列表实现方式。键值散列函数散列值形成散列表地址数据键值对相关操作方法创建一个散列表实现一个散列函数,即将码值相加的方法。 对JS散列表的简单学习 HashTable类也叫HashMap类,是Dictionary类的一种散列表实现方式。 散列算法的作用是尽可能快的在数据结构中找到一个值。 在之前的学习中,如果你想要获得数据结构中的一个值,需要遍历整...
摘要:官网地址聊天机器人插件开发实例教程一创建插件在系统技巧使你的更加专业前端掘金一个帮你提升技巧的收藏集。我会简单基于的简洁视频播放器组件前端掘金使用和实现购物车场景前端掘金本文是上篇文章的序章,一直想有机会再次实践下。 2道面试题:输入URL按回车&HTTP2 - 掘金通过几轮面试,我发现真正那种问答的技术面,写一堆项目真不如去刷技术文章作用大,因此刷了一段时间的博客和掘金,整理下曾经被...
阅读 3266·2021-11-24 09:39
阅读 3835·2021-11-22 09:34
阅读 4728·2021-08-11 11:17
阅读 1042·2019-08-29 13:58
阅读 2553·2019-08-28 18:18
阅读 522·2019-08-26 12:24
阅读 800·2019-08-26 12:14
阅读 704·2019-08-26 11:58