一、Map
Map是ES6的新增特性,是一种新的集合类型,为JavaScript带来了真正的键/值存储机制,是一种键值对的数据结构,跟对象类似;
但是,跟对象还是有区别的。
对象bject只能用数值、字符串或者符号作为键;键是无序的;键值对个数只能手动计算。
不过Map的key和value可以是任意的数据类型。键值对也是有序的;键值对的个数可以通过size属性获取。
属性
使用new关键字和Map构造函数可以构建一个空映射。
var map = new Map();
初始化后,有一些相关的方法对数据进行操作。set()方法添加键/值对;get()方法读取key;has()方法用来判断某个键是否存在;delete()方法删除某个键;clear()方法清除所有元素。
通过entries()方法取得迭代器Iterator,能取得以插入顺序生成的[key,value]形式的数组。
调用forEach()方法并传入回调,一次迭代每个键/值对。
// 创建一个Map并初始化
var map = new Map();
// 利用set()方法添加键值对
map.set(1, "值1");
map.set("key 3", "值3");
console.log(map);
// 可以用get方法去获取key,这里获取key为1的元素
console.log(map.get(1)); //值1
console.log(map.get("key 3")); //值3
// 判断一个key是否存在,用has方法。
// 判断key 3 是否存在
console.log(map.has("key 3")); //true
// 遍历,利用forEach()方法 接收两个参数:值 key
map.forEach((value, key) => {
console.log(key, value); //输出了上面的几对键值对
});
// 获取迭代器,访问它的entries ,即每一个键值对
var iterator = map.entries();
console.log(iterator);
// 利用for of 去遍历
for (let [key, value] of map) {
console.log(key, value);
}
// 删除元素用delete方法
// 删除key为1的元素
map.delete(1);
console.log(map);
二、Set
set是一种没有重复元素的集合。
与Map类似,set可以包含任何JavaScipt数据类型作为唯一值。
属性
使用new关键字和Set构造函数可以构建一个空集合。
var set = new Set();
初始化后,可以对它进行添加值add()、、查询has()、删除delete()、清空clear()、遍历元素等操作。
set会维护值插入时的顺序,因此支持按顺序迭代。集合的entries()方法返回一个迭代器,可以按照插入顺序产生包含两个元素的数组。
可以调用forEach()方法并传入回调,依次迭代每个键/值对。
// 定义一个set对象
var set = new Set();
// 添加元素: add()方法
set.add(1);
set.add(3);
set.add(5);
console.log(set); //打印输出的是有1、3、5元素的集合 Set(3) {1, 3, 5}
// 如果再添加一个3,就不会添加成功。重复的不会添加进去
set.add(3);
console.log(set); //还是三个元素 Set(3) {1, 3, 5}
// 判断它的里面有没有特定的元素
// 判断是否有5
console.log(set.has(5)); //true
//判断是否有4
console.log(set.has(4)); //false
// 遍历,利用forEach()方法,与数组类似
set.forEach((value) => {
console.log(value); //遍历出了1 3 5
});
// 调用delete方法可以删除元素
set.delete(3);
console.log(set); //Set(2) {1, 5}
// 清空它的元素clear()
set.clear();
console.log(set); //Set(0) {size: 0} 变成了空集合
// set也可以添加对象类型的元素,只不过重复的对象,指的是统一内存地址的对象。内容相同的对象不算是重复。
// 定义两个对象
var obj1 = { id: 1 };
var obj2 = { id: 1 };
// 添加到set中
set.add(obj1);
set.add(obj2);
console.log(set); //会把两个对象都装进来
set.add(obj1);
console.log(set); //还是装不进去set,因为是重复的
// 数组去重
const s1 = new Set([1, 2, 3, 3, 4, 5, 8, 8, 9]);
console.log([...s1]); // [1, 2, 3, 4, 5, 8, 9]
总结
以上就是今天要分享的关于Map和Set的内容。