From f3bfeb89f97f0bbf4bfd09ab507395ee321c1413 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Fri, 23 Jul 2021 11:06:19 -0400 Subject: wasn't supposed to be orphaned (ja) (#1672) * wasn't supposed to be orphaned (ja) * fix redirects * fix slug front-matter --- .../global_objects/map/@@iterator/index.html | 94 ++++++ .../global_objects/map/@@species/index.html | 63 ++++ .../global_objects/map/@@tostringtag/index.html | 59 ++++ .../reference/global_objects/map/clear/index.html | 71 ++++ .../reference/global_objects/map/delete/index.html | 74 +++++ .../global_objects/map/entries/index.html | 70 ++++ .../global_objects/map/foreach/index.html | 106 ++++++ .../reference/global_objects/map/get/index.html | 71 ++++ .../reference/global_objects/map/has/index.html | 71 ++++ .../reference/global_objects/map/index.html | 368 +++++++++++++++++++++ .../reference/global_objects/map/keys/index.html | 70 ++++ .../reference/global_objects/map/map/index.html | 63 ++++ .../reference/global_objects/map/set/index.html | 86 +++++ .../reference/global_objects/map/size/index.html | 59 ++++ .../reference/global_objects/map/values/index.html | 69 ++++ 15 files changed, 1394 insertions(+) create mode 100644 files/ja/web/javascript/reference/global_objects/map/@@iterator/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/@@species/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/@@tostringtag/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/clear/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/delete/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/entries/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/foreach/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/get/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/has/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/keys/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/map/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/set/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/size/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/map/values/index.html (limited to 'files/ja/web') diff --git a/files/ja/web/javascript/reference/global_objects/map/@@iterator/index.html b/files/ja/web/javascript/reference/global_objects/map/@@iterator/index.html new file mode 100644 index 0000000000..b595f6e06f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/@@iterator/index.html @@ -0,0 +1,94 @@ +--- +title: Map.prototype[@@iterator]() +slug: Web/JavaScript/Reference/Global_Objects/Map/@@iterator +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Map + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/@@iterator +original_slug: Web/JavaScript/Reference/Global_Objects/Map/@@iterator +--- +
{{JSRef}}
+ +

@@iterator プロパティの初期値は、 {{jsxref("Map.prototype.entries()", "entries")}} メソッドの初期値と同じ関数オブジェクトです。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-@@iterator.html")}}
+ + + +

構文

+ +
myMap[Symbol.iterator]
+ +

返値

+ +

マップの iterator 関数で、既定では {{jsxref("Map.prototype.entries()", "entries()")}} 関数です。

+ +

+ +

[@@iterator]() の使用

+ +
const myMap = new Map()
+myMap.set('0', 'foo')
+myMap.set(1, 'bar')
+myMap.set({}, 'baz')
+
+const mapIter = myMap[Symbol.iterator]()
+
+console.log(mapIter.next().value) // ["0", "foo"]
+console.log(mapIter.next().value) // [1, "bar"]
+console.log(mapIter.next().value) // [Object, "baz"]
+
+ +

[@@iterator]() と for..of の併用

+ +
const myMap = new Map()
+myMap.set('0', 'foo')
+myMap.set(1, 'bar')
+myMap.set({}, 'baz')
+
+for (const entry of myMap) {
+  console.log(entry)
+}
+// ["0", "foo"]
+// [1, "bar"]
+// [{}, "baz"]
+
+for (const [key, value] of myMap) {
+  console.log(`${key}: ${value}`)
+}
+// 0: foo
+// 1: bar
+// [Object]: baz
+
+ +

仕様書

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-map.prototype-@@iterator', 'Map.prototype[@@iterator]()')}}
+ +

ブラウザーの互換性

+ +

{{Compat("javascript.builtins.Map.@@iterator")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/@@species/index.html b/files/ja/web/javascript/reference/global_objects/map/@@species/index.html new file mode 100644 index 0000000000..c93e3124fc --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/@@species/index.html @@ -0,0 +1,63 @@ +--- +title: get Map[@@species] +slug: Web/JavaScript/Reference/Global_Objects/Map/@@species +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Property +translation_of: Web/JavaScript/Reference/Global_Objects/Map/@@species +original_slug: Web/JavaScript/Reference/Global_Objects/Map/@@species +--- +
{{JSRef}}
+ +

Map[@@species] アクセサープロパティは、 Map コンストラクターを返します。

+ +

解説

+ +

species アクセサープロパティは Map オブジェクトのデフォルトコンストラクターを返します。サブクラスのコンストラクターは、コンストラクターに代入して変更することによりオーバーライドすることができます。

+ +

+ +

通常のオブジェクトの species

+ +

species プロパティはデフォルトコンストラクター関数を返しますので、 Map オブジェクトには Map コンストラクターを返します。

+ +
Map[Symbol.species]; // function Map()
+ +

派生オブジェクトの species

+ +

派生したコレクションオブジェクトの中では (例えばカスタムマップである MyMap)、 MyMap の species は MyMap コンストラクターになっています。しかし、これをオーバーライドして、派生クラスのメソッド内で親の Map オブジェクトを返したい場合があります。

+ +
class MyMap extends Map {
+  // Overwrite MyMap species to the parent Map constructor
+  static get [Symbol.species]() { return Map; }
+}
+ +

仕様書

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-get-map-@@species', 'get Map [ @@species ]')}}
+ +

ブラウザーの互換性

+ +
+

{{Compat("javascript.builtins.Map.@@species")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/@@tostringtag/index.html b/files/ja/web/javascript/reference/global_objects/map/@@tostringtag/index.html new file mode 100644 index 0000000000..4ddade20be --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/@@tostringtag/index.html @@ -0,0 +1,59 @@ +--- +title: Map.prototype[@@toStringTag] +slug: Web/JavaScript/Reference/Global_Objects/Map/@@toStringTag +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Property + - Prototype + - Reference + - プロパティ +translation_of: Web/JavaScript/Reference/Global_Objects/Map/@@toStringTag +original_slug: Web/JavaScript/Reference/Global_Objects/Map/@@toStringTag +--- +
{{JSRef}}
+ +

Map[@@toStringTag] プロパティは、 "Map" の初期値を持ちます。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-@@tostringtag.html","shorter")}}
+ + + +
{{js_property_attributes(0,0,1)}}
+ +

構文

+ +
Map[Symbol.toStringTag]
+ +

+ +

toStringTag の使用

+ +
Object.prototype.toString.call(new Map()) // "[object Map]"
+
+ +

仕様書

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-map.prototype-@@tostringtag', 'Map.prototype[@@toStringTag]')}}
+ +

ブラウザーの互換性

+ +

{{Compat("javascript.builtins.Map.@@toStringTag")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/clear/index.html b/files/ja/web/javascript/reference/global_objects/map/clear/index.html new file mode 100644 index 0000000000..3518878ab6 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/clear/index.html @@ -0,0 +1,71 @@ +--- +title: Map.prototype.clear() +slug: Web/JavaScript/Reference/Global_Objects/Map/clear +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/clear +original_slug: Web/JavaScript/Reference/Global_Objects/Map/clear +--- +
{{JSRef}}
+ +

clear() メソッドは Map オブジェクトからすべての要素を削除します。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-clear.html")}}
+ + + +

構文

+ +
myMap.clear();
+
+ +

返値

+ +

{{jsxref("undefined")}}.

+ +

+ +

clear() の使用

+ +
var myMap = new Map();
+myMap.set('bar', 'baz');
+myMap.set(1, 'foo');
+
+myMap.size;       // 2
+myMap.has('bar'); // true
+
+myMap.clear();
+
+myMap.size;       // 0
+myMap.has('bar')  // false
+
+ +

仕様書

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-map.prototype.clear', 'Map.prototype.clear')}}
+ +

ブラウザーの互換性

+ +

{{Compat("javascript.builtins.Map.clear")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/delete/index.html b/files/ja/web/javascript/reference/global_objects/map/delete/index.html new file mode 100644 index 0000000000..2f6b78d5e5 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/delete/index.html @@ -0,0 +1,74 @@ +--- +title: Map.prototype.delete() +slug: Web/JavaScript/Reference/Global_Objects/Map/delete +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/delete +original_slug: Web/JavaScript/Reference/Global_Objects/Map/delete +--- +
{{JSRef}}
+ +

delete() メソッドは Map オブジェクトから特定の要素を削除します。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-delete.html")}}
+ + + +

構文

+ +
myMap.delete(key);
+ +

引数

+ +
+
key
+
Map オブジェクトから削除する要素のキーです。
+
+ +

返値

+ +

Map オブジェクトの要素が削除されたら true を、要素が存在しなければ false を返します。

+ +

+ +

delete() メソッドの使用

+ +
var myMap = new Map();
+myMap.set('bar', 'foo');
+
+myMap.delete('bar'); // 正常に削除出来れば true を返す
+myMap.has('bar');    // 存在しない要素を確認すると false を返す
+
+ +

仕様書

+ + + + + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-map.prototype.delete', 'Map.prototype.delete')}}
{{SpecName('ES2015', '#sec-map.prototype.delete', 'Map.prototype.delete')}}
+ +

ブラウザーの互換性

+ +

{{Compat("javascript.builtins.Map.delete")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/entries/index.html b/files/ja/web/javascript/reference/global_objects/map/entries/index.html new file mode 100644 index 0000000000..749cf2c6f8 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/entries/index.html @@ -0,0 +1,70 @@ +--- +title: Map.prototype.entries() +slug: Web/JavaScript/Reference/Global_Objects/Map/entries +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Map + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Map/entries +original_slug: Web/JavaScript/Reference/Global_Objects/Map/entries +--- +
{{JSRef}}
+ +

entries() メソッドは、挿入順で Map オブジェクトの要素に対する [key, value] ペアを含む新しい Iterator オブジェクトを返します。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-entries.html")}}
+ + + +

構文

+ +
myMap.entries()
+ +

返値

+ +

新しい {{jsxref("Map")}} の反復子オブジェクトです。

+ +

+ +

entries() の使用

+ +
let myMap = new Map()
+myMap.set('0', 'foo')
+myMap.set(1, 'bar')
+myMap.set({}, 'baz')
+
+let mapIter = myMap.entries()
+
+console.log(mapIter.next().value)  // ["0", "foo"]
+console.log(mapIter.next().value)  // [1, "bar"]
+console.log(mapIter.next().value)  // [Object, "baz"]
+
+ +

仕様書

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-map.prototype.entries', 'Map.prototype.entries')}}
+ +

ブラウザーの互換性

+ +

{{Compat("javascript.builtins.Map.entries")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/foreach/index.html b/files/ja/web/javascript/reference/global_objects/map/foreach/index.html new file mode 100644 index 0000000000..a2973d8f2a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/foreach/index.html @@ -0,0 +1,106 @@ +--- +title: Map.prototype.forEach() +slug: Web/JavaScript/Reference/Global_Objects/Map/forEach +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/forEach +original_slug: Web/JavaScript/Reference/Global_Objects/Map/forEach +--- +
{{JSRef}}
+ +

forEach() メソッドは、指定された関数を Map オブジェクト内にあるキーと値のペアそれぞれに対して1回ずつ、挿入順に実行します。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-foreach.html")}}
+ + + +

構文

+ +
myMap.forEach(callback([value][, key][, map])[, thisArg])
+ +

引数

+ +
+
callback
+
+

myMap のそれぞれの項目に対して実行される関数。以下の引数を取ります。

+ +
+
value {{Optional_Inline}}
+
それぞれの反復処理における値です。
+
key {{Optional_Inline}}
+
それぞれの反復処理におけるキーです。
+
map {{Optional_Inline}}
+
反復処理されるマップです (上記の構文ボックスでは myMap です)。
+
+
+
thisArg {{Optional_Inline}}
+
callback の実行時に this として使用される値です。
+
+ +

返値

+ +

{{jsxref("undefined")}} です。

+ +

解説

+ +

forEach メソッドは、指定された関数 callback を、マップの実在するそれぞれのキーに対して一度ずつ呼び出します。これは削除されたキーに対しては呼び出しません。ただし、存在していて undefined である値に対しては呼び出します。

+ +

callback は次の 3 つの引数で呼び出されます。

+ + + +

thisArg 引数が forEach に指定されると、 callback の呼び出し時にそのオブジェクトが this の値として使用されます。与えられなかった場合は、 undefinedthis の値として渡されます。 callback によって究極に管理される this の値は、関数から見える this を特定する一般規則に従います。

+ +

それぞれの値に対して一度ずつ実行されますが、 forEach が終了するまでに削除され再追加された場合は除きます。 callback はその前に削除された値に対しては実行されません。 forEach が終了する前に追加された新しい値に対しては実行されます。

+ +

+ +

Map オブジェクトの内容を表示

+ +

以下のコードは Map オブジェクト内の各要素を1行ずつ出力します。

+ +
function logMapElements(value, key, map) {
+    console.log(`map.get('${key}') = ${value}`)
+}
+new Map([['foo', 3], ['bar', {}], ['baz', undefined]]).forEach(logMapElements)
+// logs:
+// "map.get('foo') = 3"
+// "map.get('bar') = [object Object]"
+// "map.get('baz') = undefined"
+
+ +

仕様書

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-map.prototype.foreach', 'Map.prototype.forEach')}}
+ +

ブラウザーの互換性

+ +

{{Compat("javascript.builtins.Map.forEach")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/get/index.html b/files/ja/web/javascript/reference/global_objects/map/get/index.html new file mode 100644 index 0000000000..2fee60ed45 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/get/index.html @@ -0,0 +1,71 @@ +--- +title: Map.prototype.get() +slug: Web/JavaScript/Reference/Global_Objects/Map/get +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/get +original_slug: Web/JavaScript/Reference/Global_Objects/Map/get +--- +
{{JSRef}}
+ +

get() メソッドは、指定された要素を Map オブジェクトから返します。指定されたキーに関連付けられた値がオブジェクトである場合は、そのオブジェクトの参照を受け取ることになり、そのオブジェクトに対して変更を行った場合は、 Map オブジェクトの中にあるものに変更が行われます。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-get.html")}}
+ + + +

構文

+ +
myMap.get(key)
+ +

引数

+ +
+
key
+
Map オブジェクトから返される要素のキーです。
+
+ +

返値

+ +

指定されたキーに関連付けられた要素が返されます。 Map オブジェクト内にキーが見つからない場合は、 undefined を返されます。

+ +

+ +

Using get()

+ +
let myMap = new Map();
+myMap.set('bar', 'foo');
+
+myMap.get('bar');   // "foo" を返す
+myMap.get('baz');   // undefined を返す
+
+ +

仕様書

+ + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-map.prototype.get', 'Map.prototype.get')}}
+ +

ブラウザーの互換性

+ +

{{Compat("javascript.builtins.Map.get")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/has/index.html b/files/ja/web/javascript/reference/global_objects/map/has/index.html new file mode 100644 index 0000000000..16995027a8 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/has/index.html @@ -0,0 +1,71 @@ +--- +title: Map.prototype.has() +slug: Web/JavaScript/Reference/Global_Objects/Map/has +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/has +original_slug: Web/JavaScript/Reference/Global_Objects/Map/has +--- +
{{JSRef}}
+ +

has() メソッドは、指定されたキーに対する要素が存在するかどうかを示す論理値を返します。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-has.html")}}
+ + + +

構文

+ +
myMap.has(key)
+ +

引数

+ +
+
key
+
Map オブジェクト内に存在するかテストするための要素のキーです。
+
+ +

返値

+ +

特定のキーに対する要素が Map オブジェクト内に存在していたら、true を返します。さもなければ、false を返します。

+ +

+ +

has() の使用

+ +
let myMap = new Map()
+myMap.set('bar', "foo")
+
+myMap.has('bar')   // returns true
+myMap.has('baz')   // returns false
+
+ +

仕様書

+ + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-map.prototype.has', 'Map.prototype.has')}}
+ +

ブラウザーの互換性

+ +

{{Compat("javascript.builtins.Map.has")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/index.html b/files/ja/web/javascript/reference/global_objects/map/index.html new file mode 100644 index 0000000000..4f77412053 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/index.html @@ -0,0 +1,368 @@ +--- +title: Map +slug: Web/JavaScript/Reference/Global_Objects/Map +tags: + - Class + - ECMAScript 2015 + - JavaScript + - Map + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map +original_slug: Web/JavaScript/Reference/Global_Objects/Map +--- +
{{JSRef}}
+ +

Map オブジェクトはキーと値のペアを保持し、キーが最初に挿入された順序を覚えています。キーや値には任意の値 (オブジェクトと{{glossary("Primitive", "プリミティブ値")}})を使用することができます。

+ +

解説

+ +

Map オブジェクトは、その要素について挿入順で反復処理を行うことができます。 {{jsxref("Statements/for...of", "for...of")}} ループは各反復で [キー, ] の配列を返します。

+ +

キーの等価性

+ + + +

Object と Map の比較

+ +

{{jsxref("Object")}} と Map は似ています。 — どちらもキーを値に設定したり、それらの値を受け取ったり、キーを削除したり、キーに何かが格納されているかどうかを判定したりすることができます。この意味で (そして他の内蔵オブジェクトがなかったため)、従来 ObjectMap として使われてきました。

+ +

しかし、いくつかの場面で Map の方が勝るような重要な違いがあります。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MapObject
思いがけないキーMap は既定では何もキーを持っていません。明示的に設定したものだけを含みます。 +

Object にはプロトタイプがあります。よって既定のキーを含んでいるので、注意しないと自分のキーと衝突する可能性があります。

+ +
+

注: ES5 では、 {{jsxref("Object.create", "Object.create(null)")}} を使用すると回避できますが、これはめったに行われていません。

+
+
キーの型Map のキーはあらゆる値がなることができます (関数、オブジェクト、あらゆるプリミティブなど)。Object のキーは {{jsxref("String")}} または {{jsxref("Symbol")}} でなければなりません。
キーの順序 +

Map のキーは、単純で直感的な方法で順序付けられます。すなわち、反復処理を行うと、 Map オブジェクトは挿入順でキーを返します。

+
+

通常の Object のキーは現在では順序付けされていますが、以前はそうではなかったので、順序は複雑です。結果として、プロパティの順序に頼らない方が良いでしょう。

+ +

この順序は ECMAScript 2015 で初めて自身のプロパティに対してのみ定義されましたが、 ECMAScript 2020 では継承されたプロパティに対しても同様に順序が定義されています。 OrdinaryOwnPropertyKeysEnumerateObjectProperties の抽象指定操作を参照してください。しかし、オブジェクトのプロパティがすべて反復処理される単一の単一のメカニズムはないことに注意してください。 ({{jsxref("Statements/for...in", "for-in")}} は列挙可能な文字列キーのプロパティのみを含む、 {{jsxref("Object.keys")}} は自分自身の列挙可能な文字列キーのプロパティのみを含む、 {{jsxref("Object.getOwnPropertyNames")}} は列挙不可能な場合でも自分自身の文字列キーのプロパティを含む、 {{jsxref("Object.getOwnPropertySymbols")}} は、 Symbol キーを持つプロパティに対しても同じことを行う、など。)

+
+

大きさ

+
Map の中の項目数は、 {{jsxref("Map.prototype.size", "size")}} プロパティで簡単に得ることができます。 property.Object の中の項目数は、手動で数える必要があります。
反復処理Mapiterable ですので、直接反復処理を行うことができます。Object では反復処理を行うのに、いくつかの形でキーの一覧を取得して、そのうえで反復処理を行う必要があります。
性能 +

キーと値の組を頻繁に追加したり削除したりすることが求められるシナリオでは、性能がより良くなります。

+
+

キーと値の組を頻繁に追加したり削除したりすることに最適化されていません。

+
+ +

オブジェクトプロパティの設定

+ +

Map オブジェクトに対してオブジェクトプロパティを設定すると正しく動作しますが、混乱を催すことが考えられます。

+ +

たとえば、次の例は一応動作するように見えます。

+ +
let wrongMap = new Map()
+wrongMap['bla'] = 'blaa'
+wrongMap['bla2'] = 'blaaa2'
+
+console.log(wrongMap)  // Map { bla: 'blaa', bla2: 'blaaa2' }
+
+ +

しかし、このようにプロパティを設定すると、 Map データ構造に符合しません。一般的なオブジェクトの機能を使用します。 'bla' の値はクエリを行うための Map に格納されません。データにその他の操作を行うと失敗します。

+ +
wrongMap.has('bla')    // false
+wrongMap.delete('bla') // false
+console.log(wrongMap)  // Map { bla: 'blaa', bla2: 'blaaa2' }
+ +

Map にデータを格納する正しい方法は、 set(key, value) メソッドを使用する方法です。

+ +
let contacts = new Map()
+contacts.set('Jessie', {phone: "213-555-1234", address: "123 N 1st Ave"})
+contacts.has('Jessie') // true
+contacts.get('Hilary') // undefined
+contacts.set('Hilary', {phone: "617-555-4321", address: "321 S 2nd St"})
+contacts.get('Jessie') // {phone: "213-555-1234", address: "123 N 1st Ave"}
+contacts.delete('Raymond') // false
+contacts.delete('Jessie') // true
+console.log(contacts.size) // 1
+
+
+ +

コンストラクター

+ +
+
{{jsxref("Map/Map", "Map()")}}
+
新しい Map オブジェクトを生成します。
+
+ +

静的プロパティ

+ +
+
{{jsxref("Map.@@species", "get Map[@@species]")}}
+
派生クラスを生成するためのコンストラクター関数です。
+
+ +

インスタンスプロパティ

+ +
+
{{jsxref("Map.prototype.size")}}
+
Map オブジェクトの中のキーと値の組の数を返します。
+
+ +

インスタンスメソッド

+ +
+
{{jsxref("Map.prototype.clear()")}}
+
Mapオブジェクトからすべてのキーと値の組を削除します。
+
{{jsxref("Map.delete", "Map.prototype.delete(key)")}}
+
Map オブジェクトに要素が存在し、削除された場合は true を返します、要素が存在しなければ false を返します。その後では Map.prototype.has(key)false を返すようになります。
+
{{jsxref("Map.get", "Map.prototype.get(key)")}}
+
key で指定されたキーに結び付けられた値を返します。存在しない場合は undefined を返します。
+
{{jsxref("Map.has", "Map.prototype.has(key)")}}
+
key で指定されたキーに結び付けられた要素が Map オブジェクト内に存在するかどうかを示す boolean を返します。
+
{{jsxref("Map.set", "Map.prototype.set(key, value)")}}
+
Map オブジェクト内の key で指定されたキーの値を value に設定します。その Map オブジェクトを返します。
+
+ +

反復処理メソッド

+ +
+
{{jsxref("Map.@@iterator", "Map.prototype[@@iterator]()")}}
+
新しいイテレーターオブジェクトを返し、これには Mapオブジェクト内の各要素の [key, value] の配列が挿入順で含まれます。
+
{{jsxref("Map.prototype.keys()")}}
+
新しいイテレーターオブジェクトを返し、これには Mapオブジェクト内の各要素のキーが挿入順で含まれます。
+
{{jsxref("Map.prototype.values()")}}
+
新しいイテレーターオブジェクトを返し、これには Mapオブジェクト内の各要素のが挿入順で含まれます。
+
{{jsxref("Map.prototype.entries()")}}
+
Mapオブジェクト内の要素に対して挿入順にすべての要素の [key, value] の配列を含む、新しいイテレーターオブジェクトを返します。
+
{{jsxref("Map.forEach", "Map.prototype.forEach(callbackFn[, thisArg])")}}
+
callbackFn を、 Map オブジェクトに存在するそれぞれのキーと値の組に対して1回ずつ、挿入順に呼び出します。 thisArg 引数が forEach に与えられた場合は、それぞれのコールバックでこれを this の値として使用します。
+
+ +

+ +

Map オブジェクトの使用

+ +
let myMap = new Map()
+
+let keyString = '文字列'
+let keyObj    = {}
+let keyFunc   = function() {}
+
+// 値を設定する
+myMap.set(keyString, "'文字列' と結び付けられた値")
+myMap.set(keyObj, "keyObj と結び付けられた値")
+myMap.set(keyFunc, "keyFunc と結び付けられた値")
+
+myMap.size              // 3
+
+// 値を取得する
+myMap.get(keyString)    // "'文字列' と結び付けられた値"
+myMap.get(keyObj)       // "keyObj と結び付けられた値"
+myMap.get(keyFunc)      // "keyFunc と結び付けられた値"
+
+myMap.get('文字列')     // "'文字列' と結び付けられた値"
+                        // keyString === '文字列' であるため
+myMap.get({})           // undefined, keyObj !== {} であるため
+myMap.get(function() {}) // undefined, keyFunc !== function () {} であるため
+
+ +

NaN を Map のキーとして使用

+ +

{{jsxref("NaN")}} もまたキーとして使うことができます。すべての NaN は自身と等しくない (NaN !== NaN は真) にもかかわらず、以下の例は動作します。これは NaN が互いに区別できないためです。

+ +
let myMap = new Map()
+myMap.set(NaN, 'not a number')
+
+myMap.get(NaN)
+// "not a number"
+
+let otherNaN = Number('foo')
+myMap.get(otherNaN)
+// "not a number"
+
+ +

for..of を使用した Map の反復処理

+ +

Map は for..of ループを使用して反復処理を行うことができます。

+ +
let myMap = new Map()
+myMap.set(0, 'zero')
+myMap.set(1, 'one')
+
+for (let [key, value] of myMap) {
+  console.log(key + ' = ' + value)
+}
+// 0 = zero
+// 1 = one
+
+for (let key of myMap.keys()) {
+  console.log(key)
+}
+// 0
+// 1
+
+for (let value of myMap.values()) {
+  console.log(value)
+}
+// zero
+// one
+
+for (let [key, value] of myMap.entries()) {
+  console.log(key + ' = ' + value)
+}
+// 0 = zero
+// 1 = one
+
+ +

forEach() で Map を反復処理

+ +

Map は {{jsxref("Map.prototype.forEach", "forEach()")}} メソッドを使用して反復できます。

+ +
myMap.forEach(function(value, key) {
+  console.log(key + ' = ' + value)
+})
+// 0 = zero
+// 1 = one
+
+ +

Array オブジェクトとの関係

+ +
let kvArray = [["キー1", "値1"], ["キー2", "値2"]];
+
+// 通常の Map コンストラクターを使って、キー・値の 2 次元配列をマップに変換する
+let myMap = new Map(kvArray)
+
+myMap.get("キー1") // "値1" を返す
+
+// 展開演算子を使って、マップをキー・値の 2 次元配列に変換する
+console.log(Array.from(myMap)) // kvArray とまったく同じ Array を表示する
+
+// あるいは展開演算子をキーまたは値のイテレーターに使って、キーまたは値のみの配列を得る
+console.log([...myMap])
+
+// または keys() や values() のイテレーターを使用して配列に変換する
+console.log(Array.from(myMap.keys())) // ["key1", "key2"] が出力される
+
+ +

Map の複製と混合

+ +

Array と同様に、 Map は複製することができます。

+ +
let original = new Map([
+  [1, 'one']
+])
+
+let clone = new Map(original)
+
+console.log(clone.get(1))       // one
+console.log(original === clone) // false (useful for shallow comparison)
+ +
+

重要: データ自身は複製されないことに注意しておいてください。

+
+ +

Map はキーの固有性を保持しながら混合可能です。

+ +
let first = new Map([
+  [1, 'one'],
+  [2, 'two'],
+  [3, 'three'],
+])
+
+let second = new Map([
+  [1, 'uno'],
+  [2, 'dos']
+])
+
+// 2つのマップを混合します。重複するキーは後勝ちになります。
+// スプレッド演算子は基本的に Map を Array に変換します。
+let merged = new Map([...first, ...second])
+
+console.log(merged.get(1)) // uno
+console.log(merged.get(2)) // dos
+console.log(merged.get(3)) // three
+ +

Map は Array と混合することもできます。

+ +
let first = new Map([
+  [1, 'one'],
+  [2, 'two'],
+  [3, 'three'],
+])
+
+let second = new Map([
+  [1, 'uno'],
+  [2, 'dos']
+])
+
+// マップと配列を混合します。重複するキーは後勝ちになります。
+let merged = new Map([...first, ...second, [1, 'eins']])
+
+console.log(merged.get(1)) // eins
+console.log(merged.get(2)) // dos
+console.log(merged.get(3)) // three
+ +

仕様書

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-map-objects', 'Map')}}
+ +

ブラウザーの互換性

+ +

{{Compat("javascript.builtins.Map")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/keys/index.html b/files/ja/web/javascript/reference/global_objects/map/keys/index.html new file mode 100644 index 0000000000..7358ef5080 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/keys/index.html @@ -0,0 +1,70 @@ +--- +title: Map.prototype.keys() +slug: Web/JavaScript/Reference/Global_Objects/Map/keys +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Map + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Map/keys +original_slug: Web/JavaScript/Reference/Global_Objects/Map/keys +--- +
{{JSRef}}
+ +

keys() メソッドは、 Map オブジェクトに挿入された要素のキーを挿入順に列挙する新しいイテレーターオブジェクトを返します。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-keys.html")}}
+ + + +

構文

+ +
myMap.keys()
+ +

返値

+ +

{{jsxref("Map")}} の新しいイテレーターオブジェクト。

+ +

+ +

keys() の使用

+ +
var myMap = new Map();
+myMap.set('0', 'foo');
+myMap.set(1, 'bar');
+myMap.set({}, 'baz');
+
+var mapIter = myMap.keys();
+
+console.log(mapIter.next().value); // "0"
+console.log(mapIter.next().value); // 1
+console.log(mapIter.next().value); // Object
+
+ +

仕様書

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-map.prototype.keys', 'Map.prototype.keys')}}
+ +

ブラウザーの互換性

+ +

{{Compat("javascript.builtins.Map.keys")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/map/index.html b/files/ja/web/javascript/reference/global_objects/map/map/index.html new file mode 100644 index 0000000000..58947a8b0f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/map/index.html @@ -0,0 +1,63 @@ +--- +title: Map() コンストラクター +slug: Web/JavaScript/Reference/Global_Objects/Map/Map +tags: + - Constructor + - JavaScript + - Map + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/Map +original_slug: Web/JavaScript/Reference/Global_Objects/Map/Map +--- +
{{JSRef}}
+ +

Map() コンストラクターは、 {{jsxref("Map")}} オブジェクトを生成します。

+ +

構文

+ +
new Map([iterable])
+ +

引数

+ +
+
iterable
+
{{jsxref("Array")}} または他の反復処理可能なオブジェクトで、要素はキーと値の組です。 (たとえば、 [[ 1, 'one' ],[ 2, 'two' ]] のような2つの要素を持つ配列。) それぞれのそれぞれのキーと値の組が新しい Map に追加されます。
+
+ +

+ +

新しい Map の生成

+ +
let myMap = new Map([
+  [1, 'one'],
+  [2, 'two'],
+  [3, 'three'],
+])
+
+ +

仕様書

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-map-constructor', 'Map constructor')}}
+ +

ブラウザーの互換性

+ +

{{Compat("javascript.builtins.Map.Map")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/set/index.html b/files/ja/web/javascript/reference/global_objects/map/set/index.html new file mode 100644 index 0000000000..8ff51caa5a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/set/index.html @@ -0,0 +1,86 @@ +--- +title: Map.prototype.set() +slug: Web/JavaScript/Reference/Global_Objects/Map/set +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Map/set +original_slug: Web/JavaScript/Reference/Global_Objects/Map/set +--- +
{{JSRef}}
+ +

set() メソッドは、指定されたキーと値を持つ要素を Map オブジェクトに追加したり、更新したりします。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-set.html")}}
+ + + +

構文

+ +
myMap.set(key, value)
+ +

引数

+ +
+
key
+
Map オブジェクトに追加する要素のキーです。
+
value
+
Map オブジェクトに追加する要素の値です。
+
+ +

返値

+ +

Mapオブジェクト。

+ +

+ +

set() の使用

+ +
let myMap = new Map()
+
+// マップに新しい要素を追加する
+myMap.set('bar', 'foo')
+myMap.set(1, 'foobar')
+
+// マップにある要素を更新する
+myMap.set('bar', 'baz')
+
+ +

set() のメソッドチェーンの使用

+ +

set() メソッドは Map オブジェクトを返すため、以下のようにメソッドチェーンを作ることができます。

+ +
// チェーンを使用してマップに新しい要素を追加する
+myMap.set('bar', 'foo')
+     .set(1, 'foobar')
+     .set(2, 'baz');
+
+ +

仕様書

+ + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-map.prototype.set', 'Map.prototype.set')}}
+ +

ブラウザーの互換性

+ +

{{Compat("javascript.builtins.Map.set")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/size/index.html b/files/ja/web/javascript/reference/global_objects/map/size/index.html new file mode 100644 index 0000000000..b35fa5dc87 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/size/index.html @@ -0,0 +1,59 @@ +--- +title: Map.prototype.size +slug: Web/JavaScript/Reference/Global_Objects/Map/size +tags: + - ECMAScript 2015 + - JavaScript + - Map + - Property +translation_of: Web/JavaScript/Reference/Global_Objects/Map/size +original_slug: Web/JavaScript/Reference/Global_Objects/Map/size +--- +
{{JSRef}}
+ +

size アクセサープロパティは、 {{jsxref("Map")}} オブジェクトにある要素の数を返します。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-size.html")}}
+ + + +

解説

+ +

size の値は Map オブジェクトにいくつの項目があるかを表す整数値です。 size の set アクセサー関数は undefined です。このプロパティを変更することはできません。

+ +

+ +

size の使用

+ +
var myMap = new Map();
+myMap.set('a', 'alpha');
+myMap.set('b', 'beta');
+myMap.set('g', 'gamma');
+
+myMap.size // 3
+
+ +

仕様書

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-get-map.prototype.size', 'Map.prototype.size')}}
+ +

ブラウザーの互換性

+ +

{{Compat("javascript.builtins.Map.size")}}

+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/global_objects/map/values/index.html b/files/ja/web/javascript/reference/global_objects/map/values/index.html new file mode 100644 index 0000000000..3cf1341a9f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/map/values/index.html @@ -0,0 +1,69 @@ +--- +title: Map.prototype.values() +slug: Web/JavaScript/Reference/Global_Objects/Map/values +tags: + - ECMAScript 2015 + - Iterator + - JavaScript + - Map + - Method + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/Map/values +original_slug: Web/JavaScript/Reference/Global_Objects/Map/values +--- +
{{JSRef}}
+ +

values() メソッドは、 Map オブジェクトに挿入された要素を挿入順に列挙する新しいイテレーターオブジェクトを返します。

+ +
{{EmbedInteractiveExample("pages/js/map-prototype-values.html")}}
+ + + +

構文

+ +
myMap.values()
+ +

返値

+ +

{{jsxref("Map")}} の新しいイテレーターオブジェクト。

+ +

+ +

values() の使用

+ +
var myMap = new Map();
+myMap.set('0', 'foo');
+myMap.set(1, 'bar');
+myMap.set({}, 'baz');
+
+var mapIter = myMap.values();
+
+console.log(mapIter.next().value); // "foo"
+console.log(mapIter.next().value); // "bar"
+console.log(mapIter.next().value); // "baz"
+ +

仕様書

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-map.prototype.values', 'Map.prototype.values')}}
+ +

ブラウザーの互換性

+ +

{{Compat("javascript.builtins.Map.values")}}

+ +

関連情報

+ + -- cgit v1.2.3-54-g00ecf