|
1 | 1 |
|
2 | 2 | # Object.keys, values, entries
|
3 | 3 |
|
4 |
| -個別のデータ構造から離れて、それらの繰り返し処理について話しましょう。 |
| 4 | +ここでは、個々のデータ構造から離れて、それらの繰り返し処理について話しましょう。 |
5 | 5 |
|
6 | 6 | 前のチャプターで、`map.keys()`, `map.values()`, `map.entries()` と言うメソッドを見ました。
|
7 | 7 |
|
8 |
| -これらのメソッドは一般的なものであり、データ構造に対してそれを使うことは一般的な意見の一致です。独自のデータ構造を作成するときはそれらも実装しておく方がよいです。 |
| 8 | +これらのメソッドは一般的なものであり、データ構造に対して利用することは共通認識です。そのため、もし独自のデータ構造を作成するときには、それらも実装しておく方がよいです。 |
9 | 9 |
|
10 | 10 | これらは以下でサポートされています:
|
11 | 11 |
|
12 | 12 | - `Map`
|
13 | 13 | - `Set`
|
14 | 14 | - `Array` (`arr.values()` を除く)
|
15 | 15 |
|
16 |
| -普通のオブジェクトもまた同様のメソッドをサポートします。しかし構文は少し異なります。 |
| 16 | +通常のオブジェクトも同様のメソッドをサポートしますが、構文は少し異なります。 |
17 | 17 |
|
18 | 18 | ## Object.keys, values, entries
|
19 | 19 |
|
|
23 | 23 | - [Object.values(obj)](mdn:js/Object/values) -- 値の配列を返します。
|
24 | 24 | - [Object.entries(obj)](mdn:js/Object/entries) -- `[key, value]` ペアの配列を返します。
|
25 | 25 |
|
26 |
| -...しかしその違いに注意してください(例として map との比較です。): |
| 26 | +しかし、それらの違いに注意してください(例として map との比較です。): |
27 | 27 |
|
28 | 28 | | | Map | Object |
|
29 | 29 | |-------------|------------------|--------------|
|
30 |
| -| 構文 | `map.keys()` | `Object.keys(obj)` です。 `obj.keys()` ではありません。 | |
| 30 | +| 構文 | `map.keys()` | `Object.keys(obj)`. `obj.keys()` ではありません。 | |
31 | 31 | | 戻り値 | iterable | "本当の" Array |
|
32 | 32 |
|
33 |
| -最初の違いは、`Object.keys(obj)` と呼ばないといけないことです。`obj.keys()` ではありません。 |
| 33 | +最初の違いは、`obj.keys()` ではなく、`Object.keys(obj)` と呼ぶ必要がある点です。 |
34 | 34 |
|
35 |
| -なぜそうなっているのでしょう?主な理由は柔軟性です。JavaScript ではオブジェクトは全ての複雑な構造のベースであることを覚えておいてください。従って、独自の `order.values()` メソッドを実装した `order` のような独自のオブジェクトを持つかもしれません。そして、その上でもまだ `Object.values(order)` を呼ぶことができます。 |
| 35 | +なぜそうなっているのでしょう?主な理由は柔軟性です。JavaScript ではオブジェクトはすべての複雑な構造のベースであることを忘れないでください。そのため、独自の `order.values()` メソッドを実装する `order` という独自のオブジェクトがあるかもしれません。それでも `Object.values(order)` を呼ぶことができます。 |
36 | 36 |
|
37 |
| -2つ目の違いは、`Object.*` メソッドが "本当の" 配列オブジェクトを返すことです、単なる iterable ではなく。これは主に歴史的な理由です。 |
| 37 | +2つ目の違いは、`Object.*` メソッドが単なる iterable ではなく "本当の" 配列オブジェクトを返すことです。これは主に歴史的な理由です。 |
38 | 38 |
|
39 | 39 | 例:
|
40 | 40 |
|
@@ -63,8 +63,8 @@ for (let value of Object.values(user)) {
|
63 | 63 | }
|
64 | 64 | ```
|
65 | 65 |
|
66 |
| -## Object.keys/values/entries はシンボリックプロパティを無視します |
| 66 | +## Object.keys/values/entries は Symbol を使っているプロパティを無視します |
67 | 67 |
|
68 |
| -ちょうど `for..in` ループのように、これらのメソッドはキーとして `Symbol(...)` を使っているプロパティを無視します。 |
| 68 | +`for..in` ループのように、これらのメソッドはキーとして `Symbol(...)` を使っているプロパティを無視します。 |
69 | 69 |
|
70 |
| -通常それは便利です。しかし、もしもシンボリックなキーも同様にしたい場合、別のメソッド [Object.getOwnPropertySymbols](mdn:js/Object/getOwnPropertySymbols) があります。これはシンボリックのキーのみの配列を返します。また、メソッド [Reflect.ownKeys(obj)](mdn:js/Reflect/ownKeys) は *全ての* キーを返します。 |
| 70 | +通常それは便利です。しかし、もしもこのようなキーも同様に扱いたい場合は、別のメソッド [Object.getOwnPropertySymbols](mdn:js/Object/getOwnPropertySymbols) があります。これは Symbol を使っているキーのみの配列を返します。また、メソッド [Reflect.ownKeys(obj)](mdn:js/Reflect/ownKeys) は *すべての* キーを返します。 |
0 commit comments