Set、Map学习
- set
Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
const s = new Set();
[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
for (let i of s) {
console.log(i);
}
// 2 3 5 4
- 接收一个数组作为参数初始化
const set = new Set([1,2,3,4,4]);
console.log([...set])
- 去除字符串里重复的字符串
console.log([...new Set("aabbccdd")].join(''))
- set.size、set.add
let str = new Set()
str.add(1).add(2).add(2)
console.log(str.size); //2
- keys(),values(),entries
keys(),values(),entries()这些方法返回都是遍历器对象,由于set没有键名只有键值,所以key和value方法完全一致
let ss = new Set(['red','green','bule']);
for(let item of ss.keys()){
console.log(item)
}
for(let item of ss.values()){
console.log(item)
}
for(let item of ss.entries()){
console.log(item)
}
- Map
map数据结构,键值对的集合,键的范围不限于字符串,各种类型都可以当作键,包括对象
const m = new Map();
const o = {p:'hello world'};
m.set(o,'content');
console.log(m.get(o)); //constent
console.log(m.has(o)); //true
console.log(m.delete(o)); //true
console.log(m.has(o)); //false
- 也可以接受一个数组作为参数
const map = new Map([
['name','张三'],
['title','author']
]);
console.log(map.size); //2
console.log(map.has('name'));// true
console.log(map.get('name'));// 张三
console.log(map.has('title')); //true
console.log(map.get('title')); //author
- 数组转为对象
let mm = new Map([
[true,7],
[{foo:3},['abc']]
]);
console.log(mm) //Map(2) {true => 7, {…} => Array(1)}