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"}
上面代码可以看出,键值是根据内存地址判断是否相同,不是根据值