Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Web/JavaScript/Reference/Global_Objects/Map 他1件を更新 #23887

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 37 additions & 33 deletions files/ja/web/javascript/reference/global_objects/map/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@
title: Map
slug: Web/JavaScript/Reference/Global_Objects/Map
l10n:
sourceCommit: 2b87789e97bfcdf33989e3b1504aec58c2106ba6
sourceCommit: 8421c0cd94fa5aa237c833ac6d24885edbc7d721
---

{{JSRef}}

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

{{EmbedInteractiveExample("pages/js/map.html", "taller")}}

Expand Down Expand Up @@ -91,14 +92,7 @@ l10n:
</p>
<p>
この順序は ECMAScript 2015 で初めて自身のプロパティに対してのみ定義されましたが、 ECMAScript 2020 では継承されたプロパティに対しても同様に順序が定義されています。
<a href="https://tc39.es/ecma262/#sec-ordinaryownpropertykeys"
>OrdinaryOwnPropertyKeys</a
>
<a href="https://tc39.es/ecma262/#sec-enumerate-object-properties"
>EnumerateObjectProperties</a
>
の抽象指定操作を参照してください。しかし、オブジェクトのプロパティが<strong>すべて</strong>反復処理される単一の単一のメカニズムはないことに注意してください。
しかし、オブジェクトのプロパティが<strong>すべて</strong>反復処理される単一の単一のメカニズムはないことに注意してください。
({{jsxref("Statements/for...in", "for-in")}} は列挙可能な文字列キーのプロパティのみを含む、 {{jsxref("Object.keys")}} は自分自身の列挙可能な文字列キーのプロパティのみを含む、 {{jsxref("Object.getOwnPropertyNames")}} は列挙不可能な場合でも自分自身の文字列キーのプロパティを含む、 {{jsxref("Object.getOwnPropertySymbols")}} は、
<code>Symbol</code> キーを持つプロパティに対しても同じことを行う、など。)
</p>
Expand Down Expand Up @@ -225,9 +219,9 @@ console.log(contacts.size); // 1

**ブラウザーの `Map` 風オブジェクト** (または「Map 風オブジェクト」) は、多くの点で `Map` のようにふるまう [Web API](/ja/docs/Web/API) のインターフェイスです。

`Map` と同様に、エントリーはオブジェクトに追加されたのと同じ順番で走査できます
`Map` と同様に、項目はオブジェクトに追加されたのと同じ順番で走査できます
また、`Map` 風オブジェクトと `Map` は同じ名前で同じ挙動のプロパティおよびメソッドを持ちます。
しかし、`Map` と違い、各エントリーのキーと値には事前に定義された特定の型しか使用できません
しかし、`Map` と違い、各項目のキーと値には事前に定義された特定の型しか使用できません

使用可能な型は、仕様書の IDL 定義で設定されています。
たとえば、{{domxref("RTCStatsReport")}} はキーには文字列を、値にはオブジェクトを用いなければならない `Map` 風オブジェクトです。
Expand All @@ -241,7 +235,7 @@ interface RTCStatsReport {

`Map` 風オブジェクトは読み取り専用のことも、読み書き可能なこともあります。(上の IDL の `readonly` キーワードに注目してください)

- 読み取り専用の `Map` 風オブジェクトは、プロパティ [`size`](#map.prototype.size) と、メソッド [`entries()`](#map.prototype.entries)、[`forEach()`](#map.prototype.foreach)、[`get()`](#map.prototype.get)、[`has()`](#map.prototype.has)、[`keys()`](#map.prototype.keys)、[`values()`](#map.prototype.values)、[`@@iterator`](#map.prototypeiterator) を持ちます。
- 読み取り専用の `Map` 風オブジェクトは、プロパティ [`size`](#map.prototype.size) と、メソッド [`entries()`](#map.prototype.entries)、[`forEach()`](#map.prototype.foreach)、[`get()`](#map.prototype.get)、[`has()`](#map.prototype.has)、[`keys()`](#map.prototype.keys)、[`values()`](#map.prototype.values)、[`Symbol.iterator`](#map.prototypeiterator) を持ちます。
- 書き込み可能な `Map` 風オブジェクトは、これに加えてメソッド [`clear()`](#map.prototype.clear)、[`delete()`](#map.prototype.delete)、[`set()`](#map.prototype.set) を持ちます。

これらのメソッドとプロパティは、キーと値の型の制約を除いて、`Map` の対応するエンティティと同様にふるまいます。
Expand All @@ -262,38 +256,47 @@ interface RTCStatsReport {

## 静的プロパティ

- {{jsxref("Map.@@species", "get Map[@@species]")}}
- [`Map[Symbol.species]`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Map/Symbol.species)
- : 派生クラスを生成するためのコンストラクター関数です。

## 静的メソッド

- {{jsxref("Map.groupBy()")}}
- : 与えられた反復可能な要素を、与えられたコールバック関数から返された値を使用してグループ化します。最後に返される `Map` は、テスト関数から得られた一意の値をキーとして使用しており、各グループの要素の配列を取得するために使用できます。

## インスタンスプロパティ

- `Map.prototype[@@toStringTag]`
- : [`@@toStringTag`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) プロパティの初期値は文字列 `"Map"` です。このプロパティは {{jsxref("Object.prototype.toString()")}} で使用されます。
これらのプロパティは `Map.prototype` で定義され、すべての `Map` インスタンスで共有されます。

- {{jsxref("Object/constructor", "Map.prototype.constructor")}}
- : このインスタンスオブジェクトを作成したコンストラクター関数。`Map` インスタンスの場合、初期値は {{jsxref("Map/Map", "Map")}} コンストラクターです。
- {{jsxref("Map.prototype.size")}}
- : `Map` オブジェクトの中のキーと値のペアの数を返します。
- `Map.prototype[Symbol.toStringTag]`
- : [`[Symbol.toStringTag]`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) プロパティの初期値は文字列 `"Map"` です。このプロパティは {{jsxref("Object.prototype.toString()")}} で使用されます。

## インスタンスメソッド

- {{jsxref("Map.prototype.clear()")}}
- : `Map` オブジェクトからすべてのキーと値のペアを削除します。
- {{jsxref("Map.prototype.delete()")}}
- : `Map` オブジェクトに要素が存在し、削除された場合は `true` を返します。要素が存在しなければ `false` を返します。その後では `Map.prototype.has(key)` が `false` を返すようになります。
- : `Map` オブジェクトに要素が存在し、削除された場合は `true` を返します。要素が存在しなければ `false` を返します。その後では `Map.has(key)` が `false` を返すようになります。
- {{jsxref("Map.prototype.entries()")}}
- : `Map` オブジェクトの各要素の `[key, value]` からなる 2 つの要素の配列を挿入順で含む新しいイテレーターオブジェクトを返します。
- {{jsxref("Map.prototype.forEach()")}}
- : `Map` オブジェクトに存在するキーと値のペアの数だけ、挿入順に `callbackFn` を呼び出します。 `thisArg` 引数が `forEach` に渡された場合、各コールバックの `this` 値として使用されます。
- {{jsxref("Map.prototype.get()")}}
- : `key` で指定されたキーに結び付けられた値を返します。存在しない場合は `undefined` を返します。
- {{jsxref("Map.prototype.has()")}}
- : 論理値で、渡されたキーに結び付けられた要素が `Map` オブジェクト内に存在するかどうかを返します。
- {{jsxref("Map.prototype.set()")}}
- : `Map` オブジェクト内の `key` で指定されたキーの値を `value` に設定します。その `Map` オブジェクトを返します。
- {{jsxref("Map/@@iterator", "Map.prototype[@@iterator]()")}}
- : `Map` オブジェクト内の各要素の `[key, value] の配列` が挿入順で含む、新しいイテレーターオブジェクトを返します。
- {{jsxref("Map.prototype.keys()")}}
- : `Map` オブジェクト内の各要素のキーが挿入順で含む、新しいイテレーターオブジェクトを返します。
- {{jsxref("Map.prototype.set()")}}
- : `Map` オブジェクト内の渡されたキーを値に設定します。その `Map` オブジェクトを返します。
- {{jsxref("Map.prototype.values()")}}
- : `Map` オブジェクト内の各要素の値が挿入順で含む、新しいイテレーターオブジェクトを返します。
- {{jsxref("Map.prototype.entries()")}}
- : `Map` オブジェクト内の要素に対して挿入順にすべての要素の `[key, value]` の配列を含む、新しいイテレーターオブジェクトを返します。
- {{jsxref("Map.prototype.forEach()")}}
- : `callbackFn` を、 `Map` オブジェクトに存在するそれぞれのキーと値のペアに対して 1 回ずつ、挿入順に呼び出します。 `thisArg` 引数が `forEach` に与えられた場合は、それぞれのコールバックでこれを `this` の値として使用します。
- [`Map.prototype[Symbol.iterator]()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Map/Symbol.iterator)
- : `Map` オブジェクト内の各要素の `[key, value] の配列` が挿入順で含む、新しいイテレーターオブジェクトを返します。

## 例

Expand All @@ -302,9 +305,9 @@ interface RTCStatsReport {
```js
const myMap = new Map();

const keyString = '文字列'
const keyString = "文字列";
const keyObj = {};
const keyFunc function() {};
const keyFunc = function () {};

// 値を設定する
myMap.set(keyString, "'文字列' と結び付けられた値");
Expand All @@ -318,9 +321,9 @@ console.log(myMap.get(keyString)); // "'文字列' と結び付けられた値"
console.log(myMap.get(keyObj)); // "keyObj と結び付けられた値"
console.log(myMap.get(keyFunc)); // "keyFunc と結び付けられた値"

console.log(myMap.get('文字列')); // "'文字列' と結び付けられた値"。 keyString === '文字列' であるため
console.log(myMap.get("文字列")); // "'文字列' と結び付けられた値"。 keyString === '文字列' であるため
console.log(myMap.get({})); // undefined, keyObj !== {} であるため
console.log(myMap.get(function() {})); // undefined, keyFunc !== function () {} であるため
console.log(myMap.get(function () {})); // undefined, keyFunc !== function () {} であるため
```

### NaN を Map のキーとして使用
Expand Down Expand Up @@ -375,7 +378,7 @@ for (const [key, value] of myMap.entries()) {

### forEach() で Map を反復処理

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

```js
myMap.forEach((value, key) => {
Expand All @@ -396,7 +399,7 @@ const kvArray = [
// 通常の Map コンストラクターを使って、キーと値の 2 次元配列をマップに変換する
const myMap = new Map(kvArray);

console.log(myMap.get("キー1")); // "値1" を返す
console.log(myMap.get("キー1")); // "値1"

// 展開演算子を使って、マップをキー・値の 2 次元配列に変換する
console.log(Array.from(myMap)); // kvArray とまったく同じ Array を表示する
Expand All @@ -421,7 +424,8 @@ console.log(clone.get(1)); // one
console.log(original === clone); // false (useful for shallow comparison)
```

> **メモ:** *データ自身*は複製されないことに注意しておいてください。
> [!NOTE]
> データ自身は複製されないことに注意しておいてください。

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

Expand Down Expand Up @@ -478,7 +482,7 @@ console.log(merged.get(3)); // three

## 関連情報

- `Map` のポリフィルは [`core-js`](https://github.com/zloirock/core-js#map) で利用できます
- [`Map` のポリフィル (`core-js`)](https://github.com/zloirock/core-js#map)
- {{jsxref("Set")}}
- {{jsxref("WeakMap")}}
- {{jsxref("WeakSet")}}
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
---
title: get Map[@@species]
title: Map[Symbol.species]
slug: Web/JavaScript/Reference/Global_Objects/Map/Symbol.species
original_slug: Web/JavaScript/Reference/Global_Objects/Map/@@species
l10n:
sourceCommit: 8183cfa3a25c440ca4ff0f39fe941871ed495a7b
sourceCommit: 8421c0cd94fa5aa237c833ac6d24885edbc7d721
---

{{JSRef}}

**`Map[@@species]`** は静的アクセサープロパティで、 `Map` オブジェクトをコピーする方法を示す未使用のアクセサープロパティです。
**`Map[Symbol.species]`** は静的アクセサープロパティで、 `Map` オブジェクトをコピーする方法を示す未使用のアクセサープロパティです。

## 構文

Expand All @@ -18,11 +17,11 @@ Map[Symbol.species]

### 返値

`get @@species` が呼び出されたコンストラクター (`this`) の値です。返さる値は、 `Map` インスタンスのコピーを構築するために使用されます。
`get [Symbol.species]` が呼び出されたコンストラクター (`this`) の値です。返される値は、`Map` インスタンスのコピーを構築するために使用されます。

## 解説

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

> [!NOTE]
> このプロパティは現在、どの `Map` のメソッドからも使われていません。
Expand All @@ -31,7 +30,7 @@ species アクセサープロパティは `Map` オブジェクトのデフォ

### 通常のオブジェクトの species

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

```js
Map[Symbol.species]; // function Map()
Expand Down
Loading