メインコンテンツにスキップ
モジュール 6 · レッスン 2 / 4コース内の 22/32~12 min
モジュールのレッスン (2/4)

減らす

reduce は、関数配列メソッドの中で最も強力です。コレクションをウォークスルーします。 ステップごとに更新されるアキュムレータを維持します。ループが終了すると、 アキュムレータ。

サイン

JS
arr.reduce((acc, elem) => nuovoAcc, valoreIniziale);
  • acc は valoreIniziale に始まります。
  • 要素ごとに、新しい acc が計算されます。
  • 最終結果は最後の acc です。

基本的な例: 和と積

JS
const numeri = [3, 1, 4, 1, 5];

const somma = numeri.reduce((a, n) => a + n, 0);
// 14

const prodotto = numeri.reduce((a, n) => a * n, 1);
// 60

初期値がない場合、reduce は最初の要素から開始します (空の可能性があるため危険です) 配列 → エラー)。 可能な場合は、常に初期値を渡します。

オブジェクトの構築: 数を数える

JS
const parole = ['mela', 'pera', 'mela', 'kiwi', 'mela'];

const conteggio = parole.reduce((acc, p) => {
  acc[p] = (acc[p] ?? 0) + 1;
  return acc;
}, {});
// { mela: 3, pera: 1, kiwi: 1 }

最大値/最小値を求める

JS
const nums = [3, 7, 1, 9, 4];

const max = nums.reduce((a, n) => (n > a ? n : a), -Infinity);
// 9

(実際には、最大/最小値には Math.max(...nums) が推奨されます。これは教訓的な例です。)

試してみてください

運動#js.m6.l2.e1
試行回数: 0読み込み中…

`total(items)` を定義します。オブジェクトの配列 { 価格, 数量 } を受け取り、総支出額 (価格 * 数量の合計) を返します。リデュースを使用します。

エディターを読み込み中…
ヒントを表示

reduce((a, it) => a + it.price * it.quantity, 0)

3 回の試行後に解決策が利用可能になります

復習演習

運動#js.m6.l2.e2
試行回数: 0読み込み中…

`count(words)` を定義します。文字列の配列を指定すると、各文字列を出現回数にマップするオブジェクトを返します。オブジェクト アキュムレータでreduceを使用します。

エディターを読み込み中…
ヒントを表示

acc[p] = (acc[p] ?? 0) + 1; ACCを返します。

3 回の試行後に解決策が利用可能になります