知恵は、反復のですか?単に順番に各(実際には、何の違いを横断しないの概念)ターゲットへのアクセスを(アレイ、オブジェクト、など)として理解することができます
I反復配列は、二つのタイプに分けられます。
- 求めます
- トラバーサル
検索:
1.indexOf(項目、開始)
検索方法は、位置の要素の値を指定し、次の添え字を返します。
パラメータ:アイテム探している値であり、スタートが(このパラメータはオプションです)どこを探し始めるする方法を意味します。PS:startが負の値である、栗のindexOfを与える(xは、-5)の開始から二番目6示す(最後から二番目のものとしては0)、正のシーケンスの0番目に発見されています
添字の最初の出現の複数の発生が返された場合(実際には、彼は見つからないだろうし、後で見つけるために);ノーショーの場合、-1を返します。
VAR果実= [ "アップル"、 "オレンジ"、 "アップル"、 "マンゴー"]; するvar A = fruits.indexOf( "アップル"); console.log(A); // 0
2.lastIndexOf(アイテム、開始)上記と同様の方法を使用して、さまざまな場所では、彼は逆行である、それは終わりの始めから探しています。-5を取り始める場合も、負の値を指定することができる開始は、開始の位置5から、正面を向いていることを意味します。
VaRの果物= [ "アップル"、 "オレンジ"、 "アップル"、 "マンゴー" ]; するvar A = fruits.lastIndexOf( "アップル" ); console.log(A); // 2
3.find()メソッドは、テスト機能によって最初の配列要素の値を返します。
:(パラメータ項目の値、アイテムのインデックス、アレイ自体)
VaRの番号= 4、9、16、25、29 ]。 VAR最初= numbers.find(MyFunctionを)。 関数MyFunctionを(値、インデックス、アレイ){ 戻り値> 18 。 }
4. findIndex()メソッドは、テスト機能によって最初の配列要素のインデックスを返します。
:(パラメータ項目の値、アイテムのインデックス、アレイ自体)
VaRの番号= 4、9、16、25、29 ]。 VAR最初= numbers.findIndex(MyFunctionを)。 関数MyFunctionを(値、インデックス、アレイ){ 戻り値> 18 。 }
話すことは何も以上のいくつかの方法、次のキーです。
トラバーサル:7つのこのような方法があります。
1.some()
2.every()
関数三つの値(項目値、アイテムのインデックス、アレイ自体)を受け入れるの両方
各配列が決定されるため、両方の方法は、ブール型の戻り値を連続して実行されます。違いは、いくつかの限り条件を満足するがあるとしてtrueを返しますされ、すべてのは、すべての条件が満たされる必要がtrueを返します。
栗の場合:
VaRの A = [1,2,3,4,5,4,3,2,1 ]。
VAR everyResult = a.every(関数(項目、インデックス、A){ リターン(項目> 2 ); }); VAR someResult = a.some(関数(項目、インデックス、A){ リターン(項目> 2 ); });
警告( "everyResult:" + everyResult); //偽
の警告( "someResult:" + someResult); //真
もちろん、それはまた、矢印の形として機能することができます:
a.some((アイテム)=> { 戻りアイテム> 2})
これらの2つの方法だけ裁判官、配列は変更されません。
3.forEach()
4.filter()
5.map()
なぜ、これらの3つは、彼らが好きなように、一緒に話す、といくつかの前に、すべての顔の質問一緒にしばしばテスト。
三つの機能の3つの値(項目値、アイテムのインデックス、アレイ自体)を受け入れます
forEachの:どのことが操作ごとにループをループ、同様です。
マップ:戻りforEachのと非常に似て、各関数呼び出しの結果から構成されるアレイを。
上記の二つの場合と同様に、しかしリターンされる:フィルタ項目を呼び出した結果の関数が真である(理解式と呼ばされる、即ち、この式に沿ってすべての新しいアイテムの配列を返します)
違い:
マップとのforeach実際、児童差の使用上の何もない、しかし!まだ少し違い、foreachのは、戻り値ではありません。
次いで、名前が示唆するフィルタ、フィルタは、非適格項目の配列を除外することです。それで目的は、フィルタは、一般的にアイテムの不要な配列を除去するために使用、非常に異なるものになります。
私はまだそれに栗を与えます:
あります= [1,2,3,4,5,4,3,2,1 ]。
VAR filterResult = a.filter(関数(項目、インデックス、A){ リターン(項目> 2 ); });
VAR mapResult = a.map(関数(項目、インデックス、A){ 戻り項目* 2 ; });
VAR foreachResult = a.forEach(関数(項目、インデックス、A){
IF(項目<5)[インデックス] = 0;
});
警告( "filterResult:" + filterResult)。// 3,4,5,4,3
警告( "mapResult:" + mapResult)。// 2,4,6,8,10,8,6,4,2
警告( "foreachResult:" + foreachResult)。// underfined
警告( "foreachResult:" + A)。// 0,0,0,0,5,0,0,0,0
6.reduce()
7.reduceRight()
パラメータ:
-
- 合計(/値が以前に返された初期値)
- アイテム値
- プロジェクトインデックス
- 配列自体
今回私は、リフト栗を指示します:
VaRのA = [1,2,3,4,5,4,3,2,1]。
VaRの和= a.reduce(関数(PREV、CUR、インデックス、アレイ){
戻り PREV + CUR;
})
警告( "合計:" +和);
控訴の使用量は、すべての項目の配列のための最も一般的な使用法が加算されています。(実際にはvarが行うことができ、和変数の外に、多くを使用しても)実際には、この方法の魂を持つこともでき直交は、ということは、前の値であり、特にあなたが適用方法を確認します
PS:空のアレイの低減()とreduceRight()がコールバック関数を実装することがないであろう。
個人の愚見、くすぶっ好きではありません。