ホームページ  >  記事  >  ウェブフロントエンド  >  Javascriptの組み込み関数reduceの応用の詳細説明

Javascriptの組み込み関数reduceの応用の詳細説明

高洛峰
高洛峰オリジナル
2016-12-09 14:59:411274ブラウズ

前書き

一般に、reduce メソッドを通じて実装できるロジックは、forEach メソッドを通じて偽装して実装できます。ブラウザの JS エンジンがこれら 2 つのメソッドを C++ レベルでどのように実装するかは明らかではありませんが、それは確かです。このメソッドには、配列のトラバーサルも含まれている必要があります。具体的な実装の詳細に関して、配列項目の操作と格納に対して最適化が行われたかどうかは不明です。

配列のreduceメソッドの応用

reduceメソッドには2つのパラメータがあります。最初のパラメータは配列項目を操作するために使用されるコールバックで、2番目のパラメータは操作に渡される初期値です。個々の配列項目について。なお、reduceメソッドの戻り値は配列ではなく、初期値の形で重ね合わせ処理後の演算となります。

reduce メソッドの最も一般的なシナリオは重ね合わせです。

var items = [10, 120, 1000];
 
// our reducer function
var reducer = function add(sumSoFar, item) { return sumSoFar + item; };
 
// do the job
var total = items.reduce(reducer, 0);
 
console.log(total); // 1130

このように、reduce関数は初期値0を基に継続的に重ね合わせを行い、最も単純な合計の実装を完了していることがわかります。

前の記事で述べたように、reduce 関数の戻り結果の型は、渡された初期値と同じです。前の例では、初期値は数値型でした。同様に、初期値も型にすることができます。物体。

var items = [10, 120, 1000];
 
// our reducer function
var reducer = function add(sumSoFar, item) {
 sumSoFar.sum = sumSoFar.sum + item;
 return sumSoFar;
};
 
// do the job
var total = items.reduce(reducer, {sum: 0});
 
console.log(total); // {sum:1130}

多重オーバーレイ

reduceメソッドを使用すると、多次元データオーバーレイが完成します。上の例に示されているように、初期値 {sum: 0} は、{sum: 0、totalInEuros: 0、totalInYen: 0} などの複数の属性の重ね合わせを伴う場合、対応するロジックのみです。対処が必要です。

以下のメソッドでは、分割統治法が採用されています。つまり、reduce 関数の最初のパラメーターのコールバックが配列にカプセル化され、配列内の各関数が独立して重ね合わされて、reduce 操作が完了します。すべてはマネージャー関数を通じて管理され、初期パラメーターが渡されます。

var manageReducers = function(reducers) {
 return function(state, item) {
 return Object.keys(reducers).reduce(
  function(nextState, key) {
  reducers[key](state, item);
  return state;
  },
  {}
 );
 }
};

上記はマネージャー関数の実装です。パラメータとしてreducersオブジェクトを必要とし、reduceの最初のパラメータとしてコールバック型関数を返します。この関数内で、多次元の重ね合わせ作業が実行されます (Object.keys())。

この分割統治のアイデアを通じて、ターゲット オブジェクトの複数の属性の同時重ね合わせを完了できます。完全なコードは次のとおりです:

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。