【JavaScript】Array.prototype.reduce()

  • このエントリーをはてなブックマークに追加

Array.prototype.reduce()はややこしいな。

簡単な使い方
reduceメソッドで配列の中の数値をすべて足して合計値を求める。
reduceメソッドで配列の中の文字列をすべて連結した文字列を作る。
初期値に関しては、空の配列を初期値なしで実行するとエラーになったり、予期せぬ実行結果になったりする可能性があるため、初期値は設定した方がいい。
配列の中の文字列を連結したいならjoinメソッド使った方が記述内容も少なくて分かりやすいな。

reduce (他)を減らす

配列の中の数値を全部合計する処理にreduceメソッド使えるな。
しかし、なんでreduceという名前なんだ?「減らす」という意味だよな。





    let numbers = [1,2,3,4,5,6,7,8,9,10];
    let strings = ['あいうえお','かきくけこ','さしすせそ'];
    
    let result = numbers.reduce(function(sum, element) {
      return sum + element;
    },0);// 初期値として0を指定

    let result2 = strings.reduce(function(sum, element) {
      return sum + element;
    },'');// 初期値として空の文字列を指定

    console.log(result);
    console.log("typeof result = " + typeof result);
    
    console.log(result2);
    console.log("typeof result2 = " + typeof result2);
    
    let result3 = strings.join('');
    
    console.log(result3);
    console.log("typeof result3 = " + typeof result2);
    
/*

55
typeof result = number
あいうえおかきくけこさしすせそ
typeof result2 = string
あいうえおかきくけこさしすせそ
typeof result3 = string

*/

アロー関数式も使える。



    let numbers = [1,2,3,4,5,6,7,8,9,10];
    let strings = ['あいうえお','かきくけこ','さしすせそ'];

    let result = numbers.reduce(( sum, element ) => sum + element,0);
    console.log(result);
    console.log("typeof result = " + typeof result);
    
    
    let result2 = strings.reduce(( sum, element ) => sum + element,"");
    console.log(result2);
    console.log("typeof result2 = " + typeof result2);
    
/*

55
typeof result = number
あいうえおかきくけこさしすせそ
typeof result2 = string

*/

与えられた配列namesの中で最も長い文字列を見つける方法はreduceメソッドを使うとシンプルに実装できる。

reduceメソッドを使用して、アキュムレータ(accumulator)のprevと現在の変数currentを比較し、
より長い文字列を保持していくことで、最終的な最長の文字列を見つける。

アキュムレータ(accumulator)は、reduceメソッド内で使用される変数であり、
反復処理中に前の値を指す変数でもある。
reduceメソッドのコールバック関数内では、アキュムレータの値が更新され、次の反復ステップに引き継がれる。

最初のステップでは、初期値として空の文字列がprevに代入される。
それ以降の各ステップでは、現在の変数currentとアキュムレータprevの値を比較し、より長い文字列をprevに格納する。

以上の方法により、配列namesの中で最も長い文字列を求めることができる。


const names = ['url', 'scheme', 'slash', 'host', 'port', 'path', 'query', 'hash'];

const longestString = names.reduce((prev, current) => {
  return prev.length < current.length ? current : prev;
}, '');

const maxLength = longestString.length;

console.log("maxLength:" + maxLength);  // maxLength: 6


【JavaScript】Array.prototype.concatメソッドとArray.prototype.reduce()メソッド (attacktube.com)
【JavaScript入門】初心者でも分かるreduce()の使い方とサンプル例まとめ | 侍エンジニアブログ (sejuku.net) ExternalLink
【JavaScript基礎】Array.prototype.reduce() をしっかり理解する&サンプル集 – KDE BLOG (hateblo.jp) ExternalLink

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*