-----Set和Map数据结构
1.Set是什么
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set本身是一个构造函数,用来生成Set数据结构。
const myset = new Set();
[2,3,4,5,3,4,5,6].forEach(x=>myset.add(x));
for (let i of myset) {
console.log(i);//2 3 4 5 6
}
//Set函数可以接受一个数组 去重
const array1 = [1,2,3,4,5,5,2,4,4]
const qc = new Set(array1);
console.log([...qc]); //[1, 2, 3, 4, 5]
2.Set实例的属性和方法
const setArray = new Set([1,2,3,4,5,6]);
//Set.prototype.size:返回Set实例的成员总数。
console.log(setArray.size);//6
//Set.prototype.add(value):添加某个值,返回 Set 结构本身
const addArray = setArray.add(8).add(8).add(90); //逐个添加
console.log([...addArray])//[1, 2, 3, 4, 5, 6, 8, 90]
//Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。
console.log(addArray.has(7)) //false
//Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否
console.log(setArray.delete(3)) //true
console.log([...addArray]);//[1, 2, 4, 5, 6, 8, 90]
//Set.prototype.clear():清除所有成员,没有返回值。
addArray.clear();
console.log([...addArray]);//[]
3.Set遍历操作
Set.prototype.keys():返回键名的遍历器
Set.prototype.values():返回键值的遍历器
Set.prototype.entries():返回键值对的遍历器
Set.prototype.forEach():使用回调函数遍历每个成员
let set_bl = new Set(['小明','小刚','小红']);
for (let i of set_bl.keys()) {
console.log(i); //小明 小刚 小红
}
for (let i of set_bl.values()) {
console.log(i); //小明 小刚 小红
}
for (let i of set_bl.entries()) {
console.log(i); //["小明", "小明"] ["小刚", "小刚"] ["小红", "小红"]
}
//可以省略values方法,直接用for...of循环遍历 Set。
for(let i of set_bl){
console.log(i);//小明 小刚 小红
}
4. Map是什么
JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。
//Map接受一个数组作为参数
const myMap = new Map([
['name','小明'],
['age',18]
]);
console.log(myMap.size);//2
console.log(myMap.has('name'));//true
console.log(myMap.get('age'));//18
5. Map实例的属性和方法,Map遍历操作
和上面set一样具有的方法
6. Map与其他数据结构的互相转换
//Map 转为数组 最方便的方法 使用扩展运算符
const myMap2 = new Map([
['name','小明'],
['age',18],
['sex','男']
]);
console.log([...myMap2]);//0: (2) ["name", "小明"]1: (2) ["age", 18]2: (2) ["sex", "男"]
//将数组 转为 Map
var Array11 =[
['name','小明'],
['age',18],
];
const myMap3 = new Map(Array11);
console.log(myMap3);