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

我们可以使用 forEachfor..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 {{…}, {…}}