Skip to content

Commit

Permalink
feat(map-and-set): Map.groupBy静的メソッドの追加 (#1751)
Browse files Browse the repository at this point in the history
* feat(map-and-set): `Map.groupBy`の追加

* fix

* fix

* fix

* fix: iterableオブジェクトについてを追記

* fix: 第n引数の表記統一
  • Loading branch information
azu authored Jul 21, 2024
1 parent a77f67f commit 4357b65
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 6 deletions.
10 changes: 10 additions & 0 deletions prh.yml
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,16 @@ rules:
- expected: $1個
patterns: /([0-9]+)コ/i
prh: "https://github.com/asciidwango/js-primer/issues/979"
- expected: 第一引数
patterns: 第1引数
- expected: 第二引数
patterns: 第2引数
- expected: 第三引数
patterns: 第3引数
- expected: 第四引数
patterns: 第4引数
- expected: 第五引数
patterns: 第5引数

# 漢字開き
- expected: 呼び出す
Expand Down
10 changes: 5 additions & 5 deletions source/basic/async/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -390,7 +390,7 @@ delay(10).then(() => {
```

一方、`then`メソッドでは失敗時のコールバック関数だけの登録もできます。
このとき`then(undefined, onRejected)`のように第1引数には`undefined`を渡す必要があります。
このとき`then(undefined, onRejected)`のように第一引数には`undefined`を渡す必要があります。
`then(undefined, onRejected)`と同様のことを行う方法としてPromiseの`catch`メソッドが用意されています。

次のコードでは`then`メソッドと`catch`メソッドで失敗時のエラー処理をしていますが、どちらも同じ意味となります。
Expand Down Expand Up @@ -1745,7 +1745,7 @@ ECMAScript 2015(ES2015)でPromiseが仕様に入るまで、非同期処理

たとえば、Node.jsでは`fs.readFile`関数というファイルシステムからファイルをロードする非同期処理の関数があります。
指定したパスのファイルを読むため、ファイルが存在しない場合やアクセス権限の問題から読み取りに失敗することがあります。
そのため、`fs.readFile`関数の第2引数に渡すコールバック関数にはエラーファーストコールバックスタイルの関数を渡します
そのため、`fs.readFile`関数の第二引数に渡すコールバック関数にはエラーファーストコールバックスタイルの関数を渡します

ファイルを読み込むことに失敗した場合は、コールバック関数の1番目の引数に`Error`オブジェクトが渡されます。
ファイルを読み込むことに成功した場合は、コールバック関数の1番目の引数に`null`、2番目の引数に読み込んだデータを渡します。
Expand All @@ -1767,10 +1767,10 @@ fs.readFile("./example.txt", (error, data) => {
実際にエラーファーストコールバックで非同期な例外処理を扱うコードを書いてみましょう。

次のコードの`dummyFetch`関数は、疑似的なリソースの取得をする非同期な処理です。
第1引数に任意のパスを受け取り、第2引数にエラーファーストコールバックスタイルの関数を受け取ります
第一引数に任意のパスを受け取り、第二引数にエラーファーストコールバックスタイルの関数を受け取ります

この`dummyFetch`関数は、任意のパスにマッチするリソースがある場合には、第2引数のコールバック関数に`null`とレスポンスオブジェクトを渡して呼び出します。
一方、任意のパスにマッチするリソースがない場合には、第2引数のコールバック関数にエラーオブジェクトを渡して呼び出します
この`dummyFetch`関数は、任意のパスにマッチするリソースがある場合には、第二引数のコールバック関数に`null`とレスポンスオブジェクトを渡して呼び出します。
一方、任意のパスにマッチするリソースがない場合には、第二引数のコールバック関数にエラーオブジェクトを渡して呼び出します

{{book.console}}
```js
Expand Down
2 changes: 1 addition & 1 deletion source/basic/error-try-catch/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,7 @@ try {
```

このスタックトレースが失われる問題を解決するには、ES2022で追加されたErrorの`cause`オプションが利用できます。
新しいエラーオブジェクトを作成する際に、第2引数の`cause`オプションに本来のエラーオブジェクトを渡すことで、本来のスタックトレースを保持できます。
新しいエラーオブジェクトを作成する際に、第二引数の`cause`オプションに本来のエラーオブジェクトを渡すことで、本来のスタックトレースを保持できます。

{{book.console}}
[import, error-cause/index.js](src/error-cause/index.js)
Expand Down
24 changes: 24 additions & 0 deletions source/basic/map-and-set/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,29 @@ for (const [key, value] of map) {
console.log(results); // => ["key1:value1","key2:value2"]
```

### [ES2024] `Map.groupBy`静的メソッド {#map-group-by}

`Map.groupBy`静的メソッドでは、配列からグループ分けしたマップを作成できます。
これは配列からグループ分けしたオブジェクトを作成する[`Object.groupBy`][]と同じく、ES2024で追加されたメソッドです。

`Map.groupBy`メソッドは、第一引数に配列などのiterableオブジェクト、第二引数にグループ分けの条件を返すコールバック関数を渡します。
次のコードでは、配列`votes`の各要素の`vote`プロパティの値を使って、`yes``no`にグループ分けしたマップを作成しています。

{{book.console}}
<!-- doctest:meta:{ "ECMAScript": 2024 } -->
```js
const votes = [
{ id: 1, vote: "yes" },
{ id: 2, vote: "no" },
{ id: 3, vote: "yes" },
{ id: 4, vote: "yes" },
{ id: 5, vote: "no" },
];
const groupedVotes = Map.groupBy(votes, (vote) => vote.vote);
console.log(groupedVotes.get("yes")); // => [{ id: 1, vote: "yes" }, { id: 3, vote: "yes" }, { id: 4, vote: "yes" }]
console.log(groupedVotes.get("no")); // => [{ id: 2, vote: "no" }, { id: 5, vote: "no" }]
```

### マップとしてのObjectとMap {#object-and-map}

ES2015で`Map`が導入されるまで、JavaScriptにおいてマップ型を実現するために`Object`が利用されてきました。
Expand Down Expand Up @@ -536,5 +559,6 @@ console.log(results); // => ["a","b"]
[プロパティの存在を確認する]: ../object/README.md#confirm-property
[プロトタイプオブジェクト]: ../prototype-object/README.md
[`Object.prototype`を継承しないオブジェクト]: ../prototype-object/README.md#not-inherit-object
[`Object.groupBy`]: ../array/README.md#object-group-by
[^es2023]: ES2023でSymbolも扱えるように仕様が変更されています。

0 comments on commit 4357b65

Please sign in to comment.