JavaScriptは、この方法は完全なガイドをしていない)(減らします

低減()メソッドは、(左から右へ)各値の配列が縮小し始め、最終的に新しいES5の値にforeachのを減少させる方法と、項目別のアプローチのさらに別のアレイであり、アキュムレータとしての機能を取り、マップやその他の方法の配列はどのような違いので、それが作るん。

構文:

MDNから(コールバック【、はinitialValue])-more

パラメータ:

  • 関数呼び出しのそれぞれにコールバック(つのアレイは、関数は、4つの受け入れ:)
    • previousValue(コールバック関数の戻り値、または初期値)
    • currentValueは(処理されている現在の配列要素)
    • currentIndex(上付き文字の配列要素は、現在処理されています)
    • (配列呼び出し減らす()メソッド)アレイ
  • (オプションとして渡された値は、初期値をpreviousValue。コールバック関数への最初の呼び出しのように)はinitialValueを

グラフィックパラメータ

上記のあいまいな構文にもかかわらず、以下の例に直接ご紹介:

例:

アレイARR = [1,2,3,4]とアレイシーク

forEachの実現
1 
2
3
VAR ARR = [ 1、2、3、4]、
和= 0。
(関数(E){合計+ = E;});
地図実現
1 
2
3
VAR ARR = [ 1、2、3、4]、
和= 0。
ARR。マップ(関数(OBJ){ 合計+ = OBJ}); //は未定義の戻り配列。合計= 10だけのためのデモ
実装を減らします
1 
2
VAR ARR = [ 1、2、3、4]。
関数(プリ、CUR){ 戻りプレ+ CUR})。

はい、蓄積するために設計されたこの操作のために特別に減らし、引数のこの種のは、非常に便利な動作するように設計されて蓄積されます。
そこで問題は、パラメータの方法は終わり何それに使用量を減らしますか?

パラメータの分解
1.値ははinitialValueを渡すことはありません
1 
2
VAR ARR = [ 1、2、3]。
関数(プリ、CUR、インデックス、ARR){ デバッガ; 戻りプレ+ CUR})。

得られ引数アレイプローブ:

2.着信はinitialValue値
1 
2
VaRのARR = [ 1、2、3] 
関数(プリ、CUR、インデックス、ARR){ デバッガ; 戻りプレ+ CUR}、10);

入開始値(エクストラボーナス)の操作を蓄積し、他のために:それははinitialValueが再び再帰的になり、誰もが理解しておく必要はinitialValue値の役割を渡して見ることができます。
Callbackfn四つのパラメータとデバッガの動的変化を示す特性図を有していてもよいです。
そして、この方法はさらに、あなたが何ができるかのものの使用を減らすことができますか?

より多くの例

製品の需要

1
VARプロ=(関数(プリ、CUR、インデックス、ARR){ リターン予め* CUR})

最大値を求めて

1
VaRの最大値=(関数(プリ、CUR、INDE、ARR){ 戻りプレ> CURプレ:CUR;}?)。

また、あなたが使用している場合は、ほとんど何の問題もなくNodeJs環境に削減していますが、この方法は、クライアントのブラウザを減らす使用している場合、それは以下のブラウザとの互換性がIE8に必要になることがあります。
もちろん、我々はこの問題を解決するためのライブラリを導入することができ、それはjQueryの公式ウェブサイトでは、1組はまだ主張jQuery.reduce()とjQueryの公式を追加し、議論の8年まで減らすプラグインの存在のjQueryとして適し削減があり、興味深いです。でも、後でES5は、実現を減らすために追加しました。

これは、常にプラグインに含めることができ、コアには有用ではないだろう。 - fleslerによって

概要

この時点で、我々は画像をまとめできforEachのは、マップや短縮違いは次のとおりです。

  • forEachのメソッドは、いくつかのプログラマは彼らがやりたい行うために、アレイ内の各値に出ています
  • マップは、いくつかのプログラマは彼らがやりたい行うための方法に各配列の値になった後の新しい配列を返すことです
  • 各アレイの和の値を減少させる方法を添加直前(アレイまたははinitialValueの最初の値の最初の試験値)に戻されます。

決勝:少し深く挿入

使用の配列オブジェクトメソッドを減らします。

:王は、レンガは、このデータ形式を取得する搬送var arr = [ {name: 'brick1'}, {name: 'brick2'}, {name: 'brick3'} ]
所望のフォーマットそのようなデータは、次のとおり  'brick1, brick2 & brick3'
コースの配列異常フロー:[{名:「brick1」 }] 得られた着信空の配列'brick1' と空間

解決
1 
2
3
4
5
6
7
8
9
10
11
12
13
14
VAR ARR = [{名:'brick11'}、{名:'brick12'}、{名:'brick13'}] 
関数carryBricks (ARR){
リターン(関数(PREV、現在、インデックス、アレイ){
IF(インデックス=== 0){
リターン
}
そうであれば(インデックス=== Array.lengthと- 1){
戻りPREV + '&' +
}
他{
戻りPREV + '' +
}
}、'')。
}

リターンの結果:brick11, brick12 & brick13

この時点で、さらにそこに延長されたレンガの山が良いされているオリジナルのスタックは、着信はinitialValue値の場合:

1 
2
3
4
5
6
7
8
9
10
11
12
13
var arr =  [ {name: 'brick11'}, {name: 'brick12'}, {name: 'brick13'} ]
var bricks = 'brick1, brick2, brick3, '
functioncarryBricks(arr,bricks){
return (function(prev, current, index, array){
if (index === 0){
return prev +
}
elseif (index === array.length - 1){
return prev + ' & ' +
}
return prev + ', ' +
}, bricks);
}

返回结果:brick1, brick2, brick3, brick11, brick12 & brick13

おすすめ

転載: www.cnblogs.com/qgp777/p/11649406.html