JavaScript数据结构之集合

本文详细介绍了JavaScript中的Set数据结构,包括如何创建、添加、删除元素,以及size、values方法的使用。同时,文章讲解了集合的并集、交集、差集和子集的操作,展示了Set类的实现和应用场景。
摘要由CSDN通过智能技术生成

JavaScript数据结构之集合

集合是由一组无序且唯一(即不能重复)的项组成的,这个数据结构使用了与有限集合相同的数学概念,但应用在计算机科学的数据结构中。

1.创建一个集合

目前的JavaScript实现是基于2011年6月发布的ECMAScript5.1,它包括了Array类的实现,ECMAScript6包括了set类的实现。

注意:下面实现的类就是以ECMAScript6类的实现为基础的。

Set类的骨架:

function Set(){
   
var items={
   };
}
  • add(value):向集合添加一个新的项
  • remove(value):从集合里移除一个值
  • has(value):如果值在集合中,返回true,否则返回false
  • clear():移除集合中的所有项
  • size():返回集合所包含元素的数量,与数组的length属性类似
  • values():返回一个包含集合中所有值的数组
has(value)方法
this.has=function(value){
   
     return value in items;
     };

即使使用对象来存储集合的值,就可以用JavaScript的in操作符来验证给定的值是否是items对象的属性。
但这个方法还有更多的实现方式,如下:

this.has=function(value){
   
     return items.hasOwnProperty(value);
     };

所有JavaScript对象都有hasOwnProperty方法。这个方法返回一个表明对象是否具有特定属性的布尔值。

add方法
this.has=function(value){
   
     if(!this.has(value){
   
          items[value]=value;
     }
     return false;
     };

对于给定的value,可以检查它是否存在于集合中。如果不存在,就把value添加到集合中,返回true,表示添加了这个值。如果集合中已经有了这个值,返回false,表示没有添加它。

remove和clear方法
this.remove=function(value){
   
      if(this.has(value){
   
	      delete items[value];
	      return false;
	    }
	    return false;
};

在remove方法中,会验证给定的value是否存在于集合中。如果存在,就从集合中移除value,返回true,表示被移除,否则返回false。

使用Set类的示例代码如下:

var set = new Set();
set.add(1);
set.add(2);

如果想要移除集合中的所有值,可以用clear方法:

this.clear = function(){
   
		items={
   }:
};

要重置items对象,需要做的只是把一个空对象重新赋值给它。当然也可以迭代集合,用remove方法依旧移除所有的值。

size方法

下一个要实现的是 size 方法(返回集合中有多少项)。这个方法有三种实现方式。

  • 第一种方法是使用一个 length 变量,每当使用 add 或 remove 方法时控制它,就像在上一章中使用 LinkedList 类一样。

  • 第二种方法,使用JavaScript内建的 Object 类的一个内建函数(ECMAScript 5以上版本):

this.size = function(){
   
	return Object.keys(items).length; //{4}
};

JavaScript的 Object 类有一个 keys 方法,它返回一个包含给定对象所有属性的数组。在这种情况下,可以使用这个数组的 length 属性,来返回 items 对象的属性个数。
以上代码只能在现代浏览器中运行(比如IE9以上版本、Firefox 4以上版本、Chrome 5以上版本、Opera 12以 上版本、Safari 5以上版本,等等)。

  • 第三种方法是手动提取 items 对象的每一个属性,记录属性的个数并返回这个数字。这个方法可以在任何浏览器上运行,和之前的代码是等价的:
this.sizeLegacy = function(){
   
	var count = 0;
	f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值