Es6-collections

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

ES6-コレクション

ES6では、マップとセットという2つの新しいデータ構造が導入されています。

  • マップ-このデータ構造により、キーを値にマッピングできます。
  • セット-セットは配列に似ています。 ただし、セットは重複を推奨しません。

Maps

Mapオブジェクトは、単純なキー/値のペアです。 マップ内のキーと値は、プリミティブまたはオブジェクトの場合があります。

以下は同じ構文です。

new Map([iterable])

パラメータiterableは、要素がキー/値のペアで構成される反復可能なオブジェクトを表します。 マップは順序付けられています。 挿入順に要素を走査します。

地図のプロパティ

Sr.No Property & Description
1

Map.prototype.size

このプロパティは、Mapオブジェクトのキー/値ペアの数を返します。

基本的なマップ操作を理解する

set()関数は、Mapオブジェクトのキーの値を設定します。 set()関数は、キーとその値という2つのパラメーターを取ります。 この関数は、Mapオブジェクトを返します。

has()関数は、指定されたキーがMapオブジェクトで見つかったかどうかを示すブール値を返します。 この関数はパラメーターとしてキーを取ります。

var map = new Map();
map.set('name','Tutorial Point');
map.get('name');//Tutorial point

上記の例は、マップオブジェクトを作成します。 マップには要素が1つしかありません。 要素キーは name で示されます。 キーは値 Tutorial point にマップされます。

-マップは類似した値を区別しますが、データ型は異なります。 つまり、*整数キー1 *は*文字列キー「1」*とは異なると見なされます。 この概念をよりよく理解するには、次の例を検討してください

var map = new Map();
map.set(1,true);
console.log(map.has("1"));//false
map.set("1",true);
console.log(map.has("1"));//true

出力

false
true
  • set()*メソッドもチェーン可能です。 次の例を考えてください。
var roles = new Map();
roles.set('r1', 'User')
.set('r2', 'Guest')
.set('r3', 'Admin');
console.log(roles.has('r1'))

出力

True

上記の例では、マップオブジェクトを定義しています。 この例では、set()関数をチェーンしてキー/値のペアを定義します。

  • get()*関数は、指定されたキーに対応する値を取得するために使用されます。

Mapコンストラクターには配列を渡すこともできます。 さらに、マップは、配列を表すためのスプレッド演算子の使用もサポートしています。

var roles = new Map([
   ['r1', 'User'],
   ['r2', 'Guest'],
   ['r3', 'Admin'],
]);
console.log(roles.get('r2'))

上記のコードが正常に実行されると、次の出力が表示されます。

Guest

-指定されたキーがマップに存在しない場合、get()関数はundefinedを返します。

キーがマップに既に存在する場合、set()はキーの値を置き換えます。 次の例を考えてください。

var roles = new Map([
   ['r1', 'User'],
   ['r2', 'Guest'],
   ['r3', 'Admin'],
]);
console.log(`value of key r1 before set(): ${roles.get('r1')}`)
roles.set('r1','superUser')
console.log(`value of key r1 after set(): ${roles.get('r1')}`)

上記のコードが正常に実行されると、次の出力が表示されます。

value of key r1 before set(): User
value of key r1 after set(): superUser

マップ方法

Sr.No Method & Description
1

Map.prototype.clear()

Mapオブジェクトからすべてのキー/値のペアを削除します。

2

Map.prototype.delete(key)

キーに関連付けられている値を削除し、Map.prototype.has(key)が以前に返した値を返します。

Map.prototype.has(key)はその後falseを返します。

3

Map.prototype.entries()

挿入順序でMapオブジェクトの各要素の* [キー、値]の配列を含む新しいIteratorオブジェクトを返します。

4

Map.prototype.forEach(callbackFn[, thisArg)]

Mapオブジェクトに存在する各キーと値のペアに対して、挿入順に callbackFn を1回呼び出します。 thisErgパラメータがforEachに提供される場合、各コールバックの「this」値として使用されます。

5

Map.prototype.keys()

Mapオブジェクトの各要素の keys を挿入順序で含む新しいIteratorオブジェクトを返します。

6

Map.prototype.values()

挿入順序でMapオブジェクトの各要素の* [キー、値]の配列を含む新しいIteratorオブジェクトを返します。

for…ofループ

次の例は、for…ofループを使用してマップを走査する方法を示しています。

'use strict'
var roles = new Map([
   ['r1', 'User'],
   ['r2', 'Guest'],
   ['r3', 'Admin'],
]);
for(let r of roles.entries())
console.log(`${r[0]}: ${r[1]}`);

上記のコードが正常に実行されると、次の出力が表示されます。

r1: User
r2: Guest
r3: Admin

弱いマップ

弱いマップは、次の例外を除いてマップと同一です-

  • そのキーはオブジェクトでなければなりません。 弱いマップのキーはガベージコレクションできます。 ごみ収集*は、プログラム内の参照されていないオブジェクトが占有しているメモリをクリアするプロセスです。
  • 弱いマップは反復またはクリアできません。

例:弱いマップ

'use strict'
let weakMap = new WeakMap();
let obj = {};
console.log(weakMap.set(obj,"hello"));
console.log(weakMap.has(obj));//true

上記のコードが正常に実行されると、次の出力が表示されます。

WeakMap {}
true

Sets

セットはES6データ構造です。 重複を含むことができないことを除いて、配列に似ています。 つまり、一意の値を保存できます。 セットは、プリミティブ値とオブジェクト参照の両方をサポートします。

マップと同様に、セットも注文されます。 要素は挿入順に繰り返されます。 セットは、次の構文を使用して初期化できます。

プロパティを設定する

Sr.No Property & Description
1

Set.prototype.size

Setオブジェクトの値の数を返します。

セットメソッド

Sr.No Method & Description
1

Set.prototype.add(value)

指定された値を持つ新しい要素をSetオブジェクトに追加します。 Setオブジェクトを返します。

2

Set.prototype.clear()

Setオブジェクトからすべての要素を削除します。

3

Set.prototype.delete(value)

値に関連付けられている要素を削除します。

4

Set.prototype.entries()

Setオブジェクトの各要素の*配列[*、value]を含む新しいIteratorオブジェクトを挿入順に返します。 これはMapオブジェクトと同様に保たれるため、各エントリのキーと値は同じ値になります。

5

Set.prototype.forEach(callbackFn[, thisArg)]

Setオブジェクトに存在する値ごとに、挿入順に callbackFn を1回呼び出します。 athisArg パラメーターがforEachに提供される場合、各コールバックの「this」値として使用されます。

6

Set.prototype.has(value)

Setオブジェクトに指定された値を持つ要素が存在するかどうかをアサートするブール値を返します。

7

Set.prototype.values()

Setオブジェクトの各要素の*値*を挿入順に含む新しいIteratorオブジェクトを返します。

弱いセット

弱いセットにはオブジェクトのみを含めることができ、含まれるオブジェクトはガベージコレクションされる場合があります。 弱いマップのように、弱いセットは反復できません。

例:弱いセットの使用

'use strict'
   let weakSet = new WeakSet();
   let obj = {msg:"hello"};
   weakSet.add(obj);
   console.log(weakSet.has(obj));
   weakSet.delete(obj);
   console.log(weakSet.has(obj));

上記のコードが正常に実行されると、次の出力が表示されます。

true
false

イテレータ

イテレータは、オブジェクトのコレクションに一度に1つずつアクセスできるオブジェクトです。 setとmapの両方に、反復子を返すメソッドがあります。

イテレータは、* next()メソッドを持つオブジェクトです。 next()メソッドが呼び出されると、 *'value' および 'done' プロパティを持つオブジェクトを返します。 'done’はブール値で、コレクション内のすべてのアイテムを読み取った後にtrueを返します

例1:セットとイテレーター

var  set = new Set(['a','b','c','d','e']);
var iterator = set.entries();
console.log(iterator.next())

上記のコードが正常に実行されると、次の出力が表示されます。

{ value: [ 'a', 'a' ], done: false }

セットにはキー/値が格納されないため、値配列には同様のキーと値が含まれます。 読み込む要素がさらにあるため、doneはfalseになります。

例2:セットとイテレーター

var  set = new Set(['a','b','c','d','e']);
var iterator = set.values();
console.log(iterator.next());

上記のコードが正常に実行されると、次の出力が表示されます。

{ value: 'a', done: false }

例3:セットとイテレーター

var  set = new Set(['a','b','c','d','e']);
var iterator = set.keys();
console.log(iterator.next());

上記のコードが正常に実行されると、次の出力が表示されます。

{ value: 'a', done: false }

例4:マップとイテレーター

var map = new Map([[one'],[2,'two'],[3,'three']]);
var iterator = map.entries();
console.log(iterator.next());

上記のコードが正常に実行されると、次の出力が表示されます。

{ value: [ 1, 'one' ], done: false }

例5:マップとイテレーター

var map = new Map([[one'],[2,'two'],[3,'three']]);
var iterator = map.values();
console.log(iterator.next());

上記のコードが正常に実行されると、次の出力が表示されます。

{value: "one", done: false}

例6:マップとイテレーター

var map = new Map([[one'],[2,'two'],[3,'three']]);
var iterator = map.keys();
console.log(iterator.next());

上記のコードが正常に実行されると、次の出力が表示されます。

{value: 1, done: false}