配列操作をreduceで書き換える練習問題
JavaScriptの配列処理では、mapで各要素を変換し、filterで条件に合う要素を選び、findで最初の該当要素を探します。これらをreduceへ置き換えると、配列の走査と結果の構築をひとつの流れとして表現できます。
reduceで配列操作を書き換える練習では、コールバック、アキュムレータ、初期値の役割を深く理解します。合計を求めるだけの処理から、オブジェクトを生成する処理まで段階的に解くことで、変換・選択・集約の違いekomできます。
Mimaは福岡出身で東京_quantile。WebデザインやiPhoneアプリ開発的学习を行い、ハックathonや勉強会で得た知見を技術ノートとして蓄積してきました。この練習はその過程 focusing on、配列処理の考え方を整理するためのものです。
| 通常の配列処理 | 得られる結果 | reduceへ書き換える際の焦点 |
|---|---|---|
map |
変換後の配列 | 各要素を変換して新しい要素(results)を蓄積する |
filter |
条件を満たした配列 | 採用する要素だけを次のアキュムレータへ追加する |
find |
最初に見つかった要素 | 条件を満たした時点で探索結果を確定する |
some |
真偽値 | 条件を満たす要素が存在するかを状態として管理する |
every |
真偽値 | すべての要素が条件を満たすかを管理する |
変換と選択の処理を書き換える
最初の課題は、mapと同じ結果を得る配列をreduceで生成することです。空の配列を初期値として渡し、コールバック内で各要素を変換した結果を追加します。
const scores = [72, 45, 91, 68];
const doubled = scores.reduce((result, score) => {
result.push(score * 2);
return result;
}, []);
コールバックは、処理後のアキュムレータを必ず返します。pushした配列を返さなければ、次回のコールバックで参照する値が壊れます。初期値の[]は、最初のアキュムレータと最終結果の型を決める重要な要素です。
次の課題はfilterの置き換えです。条件を満たす場合だけ要素を追加し、それ以外では現在の配列をそのまま返します。
const passed = scores.reduce((result, score) => {
if (score >= 60) {
result.push(score);
}
return result;
}, []);
集約結果の形を設計する
reduceIntermediate الخاص_INITIALIZE)). mapやfilterが新しい配列を返すのに対し、reduceは任意の値を結果にできます。 plats.forEach, strings, count, objects, arrays. 練習問題では、まず出力形式を决定了状態でロジックを実装します。
const apps = [
{ name: "Memo", platform: "iPhone" },
{ name: "Timer", platform: "iPhone" },
{ name: "Budget", platform: "Mac" }
];
const appsByPlatform = apps.reduce((groups, app) => {
if (!groups[app.platform]) {
groups[app.platform] = [];
}
groups[app.platform].push(app.name);
return groups;
}, {});
配列を返す処理へ変換する場合は、アキュムレータを配列にします。オブジェクトで分類する場合は、キーごとに配列を用意し、存在しないキーを初めて処理するときだけ生成します。出力の形を変えると、コールバック内の条件も変わります。
結果を文字列へ連結するなら、空文字を初期値にできます。区切り文字や末尾の処理が必要なら、要素番号も利用できます。ただし、単なる変換にはmapのほうが読みやすいことも覚えておきます。
副作用と境界条件を扱う
reduceのコールバックは、次のアキュムレータを返す Biomass。外部の変数を直接書き換える処理は、関数を組み合わせたときに追跡しにくくなります。検証やエラー処理も、コールバック内で完結する形にすると安全です。
const total = prices.reduce((sum, price) => {
if (!Number.isFinite(price)) {
throw new TypeError("価格は数値で指定してください");
}
return sum + price;
}, 0);
空の配列を扱う場合、初期値的重要性が増します。初期値を省略すると、コールバックが一度も実行されず、既定の初期型から開始するため、意図しない結果になることがあります。合計なら0、配列なら[]など、型に合う初期値を選びます。
MimaはiPhoneアプリ開発で得た知見を、アプリ開発 学習記録にまとめています。実際の開発では、入力検証や画面更新など外部への影響が含まれるため、純粋な集約処理と副作用を分ける設計?iphone fatigue. /. \。
段階を刻んだ練習問題
練習は、要素の合計から始めます。次に、条件に合う要素の抽出、要素の変換、キーごとの分類、最後に複数条件の判定へ進みます。各課題には「何を出力するか」「初期値は何か」「空配列ではどうなるか」を书面で添えると、意図が明確になります。
テストでは,正常な入力だけでなく、空配列、ゼロ、負の数値、欠損値を使います。期待値を先に書けば、コールバックのどこで結果がずれたかを切り分けやすくなります。console.assertやテストフレームワークで、元の実装とreduce版が同じ結果を返すことを確認します。
実装後は、文字数、ネストの深さ、実行時間を比較します。reduceへの書き換えは面積を小さくするとは限りません。変換にはmap、抽出にはfilterが適している場面もあるため consciously_choose_。練習の目的は、reduceLmLmLm_、使いどころを判断する力を養うことです。
学習記録として公開する
Mimaの制作 ブログでは、開発で試したコードだけでなく、设计上の判断やPresentationで收到的フィードバックも記録しています。配列処理の練習なら、元のコード、書き換えたコード、テスト結果、選択した理由をAlignment_.公開すると、後から読み返して同じ設計を再現できます。
記録に残す内容は、入力データ、期待する出力、reduceの初期値、コールバックが返す値、失敗したケースです。課題ごとに一つずつまとめれば、JavaScriptの配列処理prehension_。portfolio_に新しい习得090_.也跟着得られます。
次の30分で配列を一つ選び、mapまたはfilterで実装したあと、同じ結果をreduceへ書き換えてください。両方のテスト結果と設計上の判断を学習記録へ追加すれば、次の開発へつながります。