鮮やか、forEachの、フィルタ、マップ、いくつかの、すべての、見つける、findIndexの違いを説明減らします

PS。(デンバー最近定住意思、そしてここに記事を書くために主に行ってきました、この2日間は、自分自身をピックアップしますここに送られ再配置、記事を書きました)

序文

別の後に、後に横断するために、様々な方法を学ぶために最初からループを反復処理するための方法は、実際には、最大の違いは、異なるシナリオのアプリケーションです。私たちは、それによって方法が状況下で適切であるということです覚えておく必要があります。

ジャガイモを選んで起動します

ジャガイモの束は、コードに置き換えた場合、次のように表すことができ、そこです。

var potatos = [{ id: '1001', weight: 50 },
{ id: '1002', weight: 80 },
{ id: '1003', weight: 120 },
{ id: '1004', weight: 40 },
{ id: '1005', weight: 110 },
{ id: '1006', weight: 60 }]
复制代码

上記の重量(g)は、アレイとして記録している間

var w = [50, 80, 120, 40, 110, 60]
复制代码

農民:私は熟成したい(バッチ操作)

私たちは、すべてについて熟成ポテトのこのバッチは、体重増加がで使用することができることを願っていますforEach方法

potatos.forEach(potato =>  potato.weight += 20 )
复制代码

map私ができる:回答への道!

potatos.map(potato => potato.weight += 20 )
复制代码

map追加されました、私はあなたに、新しい更新を統計表の重みを外に置くことができます

w = potatos.map(potato => 
{ return potato.weight += 20 })

//[ 70, 100, 140, 60, 130, 80 ]
复制代码

マップやforEachの最大の違いは、戻り値をFOREACHない、ということです。あなたのリターンはforEachのを追加するのは無駄である場合でも、

w = potatos.forEach(potato => 
    { return potato.weight += 20 })
    
//undefined
复制代码

ボス:私はちょうど大きなポテト(フィルターフィルター)です

filterフィルタリングは、名前から判断するものとする、あなたは生きているが、このようなスクリーニングフィルタである知っているfilter乾燥します

var bigOnes = potatos.filter(potato => { return potato.weight > 100 })

//[ { id: '1003', weight: 120 }, { id: '1005', weight: 110 } ]
复制代码

これは、新しい配列オブジェクトを返し、元の配列は変更されません。

ベンダー:あなたは大したああ(その出会いを)持っていません

次の小さなトレーダーに我々これは小さなジャガイモであることを私たちに笑った、ビッグマックを見つけられないことがありパースニップは彼に一見を与えました

(旅行に)配列の予選タイムを決定する必要がない場合にのみ、我々は必要なsomeメソッドデビュー

var hasbig = potatos.some(potato => { return potato.weight > 100 })

//true
复制代码

私たちのsome小さな男の子は、ジャガイモの貯蔵倉庫は、ちょうど、資格を見つける見つけるために戻った、と語ったtrue余分な生活(優れた性能)を行わない、全体を横断していないことを

ベンダー:それは(完全準拠)すべて大きな権利です

小さなトレーダーは受け入れることを拒否し、私はそれがすべての大きなが送信されたあなたを信じていませんeveryチェックするために、小さな男の子を

var allbig = potatos.every(potato => { return potato.weight > 100 })

//false
复制代码

every各要素に対して実行しcallback、見つかったそうまで、callbackリターンfalseを返す、要素(あまり大きくないジャガイモ)をfalse反復が完了するまでも戻らなかった、false戻った後、true

お客様:私は大きなジャガイモ(リターンとライン)です

顧客に、私は大きなじゃがいもがしたいfindボランティアを、私は彼に行ってきました

var big = potatos.find(potato => { return potato.weight > 100 })

//{ id: '1003', weight: 120 }
复制代码

findそしてsome、非常に似ている資格を探している、しかし、あなたが持つことができるsome裏報告の収集に丸で行く「はい」( true)、およびfind差し出すジャガイモを入れて(復帰第一目標基準を満たすために)

レジ:このポテトは倉庫への最初の数である(数を返します)

レジ係がそれを記録する準備ができて販売しました

「ねえ、これはいくつかのジャガイモの倉庫の最初で、」findと彼は言った:「ああ、私はジャガイモを保持ひいきにし、最初の数を見ていません」

「あなた軽率、私ができるように知っていたfindIndexあなたと一緒に行きます。」

var i = potatos.findIndex(potato=>{ return potato.weight > 100 })

//2
复制代码

あなたが必要とされる要素のインデックスを知っておく必要がある場合は、使用することができますfindIndex

findIndex最初の予選のインデックス番号を返します。

ボス:今年の収穫方法、それは(再帰的に蓄積)

テーブルプラスワンプラスジャガイモの重量に数学で終わりでいえば、今年収穫する方法がわからない、より良い人

reduce彼は言った:それはどのような私ではないかもしれません

var sum = weight.reduce((sum, w) => { return w + sum },0)

//460
//并不会改变原表格
复制代码

,;すなわち、減少させる()メソッドは、最初の引数としてコールバック関数を受け取り、コールバック関数は、4つのパラメーターを受け入れ
1、previousValue =>初期関数コールバックまたは重畳の値の値;
2、currentValueは=>コールバック(サイクル)実行される値;
3、インデックス=>「currentValueは」インデックス値;
4、ARR =>配列自体;
減らす()メソッドは、最後の呼び出しのコールバックの戻り値を返します。

それはそうすることができ

  var sum = potatos.reduce((sum, p) => 
  { return p.weight + sum },0)
  
  //460
复制代码

reduce実際には、それ以上の能力が、ここでは基本的な使い方を知ることができます

概要

ジャガイモ体において、我々は、例えば上述したように、いくつかのより高次の使用があり、これらの方法の基本的なシナリオを学習しreduce、後でより詳細な研究やプレゼンテーション等を用いることができる平らなアレイは、アレイの重複排除、

私は〜この記事は、これらの方法を区別するのに役立ちます願っています

ます。https://juejin.im/post/5d08467fe51d451063431814で再現

おすすめ

転載: blog.csdn.net/weixin_34245082/article/details/93183958