JavaScript数据结构与算法(3)集合

主要参考:
https://www.cnblogs.com/xiaohuochai/p/8176248.html
《学习JavaScript数据结构与算法》

1.集合介绍

一个集合示例:

{1,2,3,4,5}

其实集合set内部是键值对方式:

在这里插入图片描述
集合这种键值对方式和字典很相似,集合是以[值,值]的形式存储元素,字典则是以[键,值]的形式来存储元素。

2.创建集合

声明一些集合可用的方法:
add(value):向集合添加一个新的项。
remove(value):从集合移除一个值。
has(value):如果值在集合中,返回true,否则返回false。
clear():移除集合中的所有项。
size():返回集合所包含元素的数量。与数组的length属性类似。
values():返回一个包含集合中所有值的数组。

代码实现如下:

function Set(){

	var items = {};

	//has(value)值是否在集合中,而且has方法会被下面调用
	this.has = function(value){
		return items.hasOwnProperty(value);
	}
	//add(value)添加值
	this.add = function(value){
		if(!this.has(value)){
			items[value] = value;
			return true; //表示执行到此结束,返回true,不然执行下面,返回false
		}
		return false;
	}

	//remove(value)
	this.remove = function(value){
		if(has(value)){
			delete items[value]; //delete 操作符用于删除对象{}/数组[]的某个属性;如果没有指向这个属性的引用,那它最终会被释放。
			return true;
		}
	}

	//clear(),移除集合中所有值,把一个空对象重新赋值给它
	this.clear = function(){
		items = {};
	}

	//size,一种方法是add或remove时length控制,下面是第二种方法
	this.size = function(){
		return Object.keys(items).length;
	}
	//sizeLegacy第三种方法,遍历items对象的每一个属性,记录属性的个数并返回这个数字。
	this.sizeLegacy = function(){
		var count = 0;
		for(var prop in items){
			if(items.hasOwnProperty(prop)){
				++count;
			}
		}
		return count;
	}

	//values 返回一个包含集合中所有值的数组,第一种方法,通过Object.keys()返回一个索引数组。
	this.values = function(){
		let values = [];
		let keys = Object.keys(items);

		for(let i=0;i<keys.length;i++){
			values.push(items[keys[i]]); //因为items是以对象形式,所以是[]形式
		}
		return values;

	}
	//values第二种方法,for in遍历可遍历对象,for in返回的是对象的每一个下标,还要记得使用hasOwenProperty()
	this.valuesLegacy = function(){
		let values1 = [];
		for(let key in items){
			if(items.hasOwnProperty(key)){
				values.push(items[keys])
			}
		}
		return values1;
	}

}

//测试Set类
var set = new
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值