定义:
Set是一种叫做集合的数据结构,
Map是一种叫做字典的数据结构
-
集合
是由一堆无序的、相关联的,且不重复的内存结构【数学中称为元素】组成的组合 -
字典
是一些元素的集合。每个元素有一个称作key 的域,不同元素的key 各不相同 -
共同点:集合、字典都可以存储不重复的值
-
不同点:集合是以[值,值]的形式存储元素,字典是以[键,值]的形式存储
Set
- 介绍:
Set是es6新增的数据结构,类似于数组,但是成员的值都是唯一的,没有重复的值, 我们一般称为集合,Set本身是一个构造函数,用来生成 Set 数据结构
const s = new Set();
增删改查的方法:
-
add()-->添加某个值,返回的Set结构本身,当添加的值Set中已经存在,不会执行操作
-
delete()-->删除某个值,返回布尔值
-
has()-->判断是否为Set成员,返回布尔值
-
clear()-->清除所有成员,没有返回值
遍历方法
- keys():返回键名的遍历器
- values():返回键值的遍历器
- entries():返回键值对的遍历器
- forEach():使用回调函数遍历每个成员-->用于对每个成员执行某种操作,没有返回值,键值、键名都相等,同样的
forEach方法有第二个参数,用于绑定处理函数的
let set = new Set(['red', 'green', 'blue']);
for (let item of set.keys()) {
console.log(item);
}
// red
// green
// blue
for (let item of set.values()) {
console.log(item);
}
// red
// green
// blue
for (let item of set.entries()) {
console.log(item);
}
// ["red", "red"]
// ["green", "green"]
// ["blue", "blue"]
let set = new Set([1, 4, 9]);
set.forEach((value, key) => console.log(key + ' : ' + value))
// 1 : 1
// 4 : 4
// 9 : 9
Map
定义:
Map类型是键值对的有序列表,而键和值都可以是任意类型,Map本身是一个构造函数,用来生成 Map 数据结构
增删改查:
- size 属性-->(map1.size)返回Map结构成员总数
- set()-->设置键名
key对应的键值为value,然后返回整个 Map 结构 - get()-->
get方法读取key对应的键值,如果找不到key,返回undefined - has()-->判断某个键是否在当前Map对象中
- delete()-->删除某个键,返回ture或false
- clear()-->清除所有成员,没有返回值
遍历
- keys():返回键名的遍历器
- entries():返回所有成员的遍历器
- forEach():遍历 Map 的所有成员
const map = new Map([
['F', 'no'],
['T', 'yes'],
]);
for (let key of map.keys()) {
console.log(key);
}
// "F"
// "T"
for (let value of map.values()) {
console.log(value);
}
// "no"
// "yes"
for (let item of map.entries()) {
console.log(item[0], item[1]);
}
// "F" "no"
// "T" "yes"
// 或者
for (let [key, value] of map.entries()) {
console.log(key, value);
}
// "F" "no"
// "T" "yes"
// 等同于使用map.entries()
for (let [key, value] of map) {
console.log(key, value);
}
// "F" "no"
// "T" "yes"
map.forEach(function(value, key, map) {
console.log("Key: %s, Value: %s", key, value);
});
WeakSet 和 WeakMap
WeakSet和Set的区别
WeakSet可以接受一个具有Iterable接口的对象作为参数- 在
API中WeakSet与Set有两个区别:没有遍历操作的API,没有size属性 WeakSet只能成员只能是引用类型,而不能是其他类型的值
WeakMap和Map的区别
- 在
API中WeakMap与Map有两个区别:没有遍历操作的API,没有clear清空方法 WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名WeakMap的键名所指向的对象,一旦不再需要,里面的键名对象和所对应的键值对会自动消失,不用手动删除引用