ES6 - 映射和集合
ES6 引入了两种新的数据结构:映射和集合。让我们详细了解它们。
Map
Map 映射是键值对的有序集合。映射类似于对象。但是,映射和对象之间存在一些差异。这些列在下面 −
| Sr.No | Object | Map |
|---|---|---|
| 1 | 键不能是 Object 类型 | 键可以是任何类型 |
| 2 | 键无序 | 键有序 |
| 3 | 不是iterable | iterable |
语法
Map 的语法如下 −
let map = new Map([iterable]) let map = new Map()
示例
以下示例使用可迭代构造函数创建映射 −
<script>
let andy = {ename:"Andrel"},
varun = {ename:"Varun"},
prijin = {ename:"Prijin"}
let empJobs = new Map([
[andy,'Software Architect'],
[varun,'Developer']]
);
console.log(empJobs)
</script>
上述代码的输出如下所示 −
{{…} => "Software Architect", {…} => "Developer"}
检查映射的大小
size 属性可用于确定存储在映射中的值的数量。
语法
检查映射大小的语法如下所示 −
map_name.size
示例
<script>
let daysMap = new Map();
daysMap.set('1', 'Monday');
daysMap.set('2', 'Tuesday');
daysMap.set('3', 'Wednesday');
console.log(daysMap.size);
</script>
上述代码的输出结果如下图所示 −
3
下面是一些可以用来操作映射的常用方法 −
| Sr.No | 对象 &映射 |
|---|---|
| 1 |
set(key,value)
将键和值添加到映射 |
| 2 |
get(key)
如果键匹配,则返回值 |
| 3 |
has(key)
如果具有指定键的元素存在;否则返回 false |
| 4 |
keys()
返回一个迭代器,其中包含映射对象中每个元素的键 |
| 5 |
values()
返回一个迭代器,其中包含映射对象中每个元素的值 |
| 6 |
entries()
返回一个迭代器,其中包含 Map 中每个元素的键值对 |
| 7 |
delete(key)
从 Map 对象中删除指定元素 |
WeakMap
WeakMap 是 map 的一个小的子集。键是弱引用,因此它只能是非原始的。如果对象键没有引用,它将被垃圾回收。
- 不可迭代
- 每个键都是对象类型
如果键没有引用,WeakMap 将允许垃圾回收。
语法
WeakMap 的语法如下 −
new WeakMap([iterable])
示例 1
<script> let emp = new WeakMap(); emp.set(10,'Sachin');// TypeError 因为键应该是对象 </script>
示例 2
<script>
let empMap = new WeakMap();
// emp.set(10,'Sachin');// Error 因为键应该是对象
let e1= {ename:'Kiran'},
e2 = {ename:'Kannan'},
e3 = {ename:'Mohtashim'}
empMap.set(e1,1001);
empMap.set(e2,1002);
empMap.set(e3,1003);
console.log(empMap)
console.log(empMap.get(e2))
console.log(empMap.has(e2))
empMap.delete(e1)
console.log(empMap)
</script>
上述代码的输出如下 −
{{…} => 1002, {…} => 1003, {…} => 1001}
1002
true
{{…} => 1002, {…} => 1003}
Set
Set 集合是唯一值的无序集合。此数据结构可以包含原始类型和对象类型的值。
语法
Set 的语法如下 −
new Set([iterable]) new Set()
示例
<script> let names = new Set(['A','B','C','D']); console.log(names) </script>
上述代码的输出如下所示 −
{"A", "B", "C", "D"}
检查集合的大小
Set 对象的 size 属性可用于查询 Set 中的元素数量。
语法
检查集合大小的语法如下所示 −
set.size
示例
<script> let names = new Set(['A','B','C','D']); console.log(names.size) </script>
上述代码的输出如下所示 −
4
迭代 Set
我们可以使用 forEach 和 for..of 循环来迭代 Set。如下面的示例所示−
Example
<script>
let names= new Set(['A','B','C','D']);
//使用 forEach 进行迭代
console.log('forEach')
names.forEach(n=>console.log(n))
console.log('for of..')
//使用 for..of 进行迭代
for(let n of names){
console.log(n)
}
</script>
上述代码的输出如下 −
forEach A B C D for of.. A B C D
可以使用以下方法来操作集合 −
| Sr.No | Object & Map |
|---|---|
| 1 |
add(element)
向集合中添加元素 |
| 2 |
has(element)
如果找到元素,则返回 true;否则返回 false |
| 3 |
delete(element)
从 Set 中删除特定元素 |
| 4 |
clear()
从 Set 中清除所有元素 |
WeakSet
Weakset 以弱方式保存对象,这意味着如果未引用存储在 WeakSet 中的对象,则它们将被垃圾回收。 WeakSet 不可迭代,并且没有 get 方法。
<script>
let e1 = {ename:'A'}
let e2 ={ename:'B'}
let e3 ={ename:'C'}
let emps = new WeakSet();
emps.add(e1);
emps.add(e2)
.add(e3);
console.log(emps)
console.log(emps.has(e1))
emps.delete(e1);
console.log(emps)
</script>
上述代码的输出将如下所示 −
WeakSet {{…}, {…}, {…}}
true
WeakSet {{…}, {…}}

