Es6之Set和Map结构

Set

Set:类似数组,但是它的成员没有重复值

		let s = new Set();
		let s2 = new Set([1,2,3,4,1,2,3]);
		[1,2,3,4,1,2,3].forEach(x => s.add(x));
		console.log(s); // {1, 2, 3, 4}
		console.log(s2); //{1, 2, 3, 4}

可以看出会去掉重复值
那我们就可以利用这个特性来去除数组中重复的值

		let s = new Set([1,2,3,4,1,2,3]);
		let str = [...new Set('aaabccdd')].join(''); //去除重复的字符
		console.log(s);// {1, 2, 3, 4}
		console.log(str); //abcd

Set的方法

  • Set.add(value) 添加值返回set
  • Set.delete(value) 删除某个值 返回一个布尔值
  • Set.has(value) 判断是否含有某个值 true表示有 false表示没有
  • Set.clear() 清除所有成员 没有返回值
  • Set.size() 返回set结构长度
    不要偷懒复制到编辑器运行看看
		let s = new Set([1,2,3,4,1,2,3]);
		s.add(5); //{1, 2, 3, 4, 5}
		s.has(5);//true
		s.delete(5); //true
		s.has(5);//false
		s.clear();
		console.log(s); //{}

Set和Array互转

		let s = new Set([1,2,3,4,1,2,3]);
		console.log(s);//{1, 2, 3, 4}
		let arr = Array.from(s);
		console.log(arr);//[1, 2, 3, 4]

WeakSet

WeakSet和set类似,但是它只接受对象做为成员

		let obj = {}
		let s = new WeakSet();
		s.add(obj)
		console.log(s);//WeakSet {{…}}
		let s1 = new WeakSet('test'); //TypeError: Invalid value used in weak set

方法有:

  • WeakSet.add(obj)
  • WeakSet.delete(obj);
  • WeakSet.has(obj)
    和set方法功能一样并且WeakSet没有size属性

Map

Map结构对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。

		let map = new Map();
		map.set('name','lisi');
		console.log(map); //{"name" => "lisi"}

方法:

  • Map.set(key,value) 用于设置键和值
  • Map.delete(key) 用于删除键对值
  • Map.has(key) 用来查找键对应的值
  • Map.clear() 清空所有成员
		let map = new Map([['age','18']]);
		map.set('name','lisi');
		console.log(map); //{"name" => "lisi"}
		console.log(map.has('name')); //true
		console.log(map.delete('name')); //true
		console.log(map) //Map(1) {"age" => "18"}

注意在mao中键值是根据内存地址判断,如果两个键值值相同地址不同也视为两个键值

		let map = new Map([['age','18']]);
		let a = ['a'];
		let b = ['a'];
		map.set(a,'a'); 
		map.set(b,'b');
		console.log(map);//{"age" => "18", Array(1) => "a", Array(1) => "b"}
		map.set(a,'123')
		console.log(map); //{"age" => "18", Array(1) => "123", Array(1) => "b"}

上面代码可以看出,键值是根据内存地址判断是否相同,不是根据值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值