Es6-maps-and-sets

提供:Dev Guides
移動先:案内検索

ES6-マップとセット

ES6では、 mapssets という2つの新しいデータ構造が導入されています。 それらについて詳しく学びましょう。

Maps

マップは、*キーと値のペア*の順序付けられたコレクションです。 マップはオブジェクトに似ています。 ただし、マップとオブジェクトの間にはいくつかの違いがあります。 これらは以下にリストされています-

Sr.No Object Map
1 Keys cannot be Object type Keys can be any type
2 Keys are not ordered Keys are ordered
3 not iterable iterable

構文

マップの構文は以下のとおりです-

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 Object & Map
1

set(key,value)

キーと値をマップに追加します

2

get(key)

キーが一致した場合に値を返します

3

has(key)

指定されたキーを持つ要素が存在する場合はtrueを返します。それ以外の場合はfalseを返します

4

keys()

マップオブジェクトの各要素のキーを含むイテレータを返します

5

values()

マップオブジェクトの各要素の値を含むイテレータを返します

6

entries()

マップ内の各要素のキーと値のペアを含むイテレータを返します

7

delete(key)

指定された要素をMapオブジェクトから削除します

WeakMap

WeakMapは小さな*マップのサブセット*です。 キーは弱く参照されるため、非プリミティブのみにすることができます。 オブジェクトキーへの参照がない場合、ガベージコレクションの対象になります。

  • 反復不可能
  • すべてのキーはオブジェクトタイプです

WeakMapは、キーに参照がない場合、ガベージコレクションを許可します。

構文

WeakMapの構文は以下に記載されています-

new WeakMap([iterable])

例1

<script>
   let emp = new WeakMap();
   emp.set(10,'Sachin');//TypeError as keys should be object
</script>

例2

<script>
   let empMap = new WeakMap();
  //emp.set(10,'Sachin');//Error as keys should be object
   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

セットは、一意の値の順不同のコレクションです。 このデータ構造には、プリミティブ型とオブジェクト型の値を含めることができます。

構文

セットの構文は以下のとおりです-

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

セットの反復

*forEach* および *for..of* ループを使用して、セットを反復処理できます。 これは以下の例に示されています-

<script>
   let names= new Set(['A','B','C','D']);
  //iterate using forEach
   console.log('forEach')
   names.forEach(n=>console.log(n))

   console.log('for of..')

  //iterate using 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)

セットから特定の要素を削除する

4

clear()

セットからすべての要素をクリアします

弱いセット

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 {{…}, {…}}