2017-01-04 12 views
1

私は定期的に配列を反復するためにループforループ、forEachループ、Array.mapなどを使用します。私たちはまた、配列をループするためにArray.findを使用することができることを知って来て、それはまた、条件に基づいて、配列にマッチした値を返すことができます:私はArray.findとforeachなどのイテレータをどのように比較できますか?

を次のようにArray.find()forループを使用してオブジェクトの配列を繰り返してきた

Array.find使用:

[{ 
    name: "John" 
}, { 
    name: "Cannady" 
}, { 
    name: "Sherlock" 
}].find(function(oArrayObject) { 
    console.log(oArrayObject) 
}); 

出力をコンソール上:

{name: "John"} 
{name: "Cannady"} 
{name: "Sherlock"} 

forループを使用:

var aNames=[{ 
      name: "John" 
     }, { 
      name: "Cannady" 
     }, { 
      name: "Sherlock" 
     }] 

for(var i=-0;i<aNames.length;i++){ 
console.log(aNames[i]); 
} 

出力をコンソール上:

{name: "John"} 
{name: "Cannady"} 
{name: "Sherlock"} 

どちらのコードが同じことをしました。

forループに対するArray.find()の利点は何ですか?

どちらが優れたパフォーマンスを示しますか?

私にパフォーマンスの面でarray.findと他のイテレータの違いを教えてください、用法、内部機能等...

+0

[JavaScriptの配列にはそれぞれ?]の可能な複製?(http://stackoverflow.com/questions/9329446/for-each-over-an-array-in-javascript) – wdosanjos

+2

また、 forEach'、 'every'、' some'、 'map'、などですが、ドキュメントを読むこともできます。 – trincot

答えて

3

Array#findは、よく、述語に一致する配列内のアイテムを検索するために使用されています、それを返す。 Array.findが戻ると、ループが終了します。パフォーマンス上の理由から、探している項目が最後でない場合は、配列全体を反復する必要はありません。 forEachmapfilterreducereduceRightsomeeveryfind、及びfindIntex

var result = [{ 
 
    name: "John" 
 
}, { 
 
    name: "Cannady" 
 
}, { 
 
    name: "Sherlock" 
 
}].find(function(o) { 
 
    return o.name.startsWith('Ca'); 
 
}); 
 

 
console.log(result);

は、以下のような配列を反復処理するための多くの方法(see array in mdn)、があります。

Array#forEachを除いて、ほとんどは反復自体を超えた追加機能を提供します。

1

for/forEachを繰り返し使用すると、コレクション内のすべてのオブジェクトをタッチまたはチェックする必要があります。 findメソッドは、探しているものが分かっていて、そのコレクションがあるかどうかをすばやく検索したいときです。

3

find()メソッドは、指定されたテスト関数を満たす配列 の最初の要素の値を返します。それ以外の場合は、未定義です が返されます。

find機能、例えば、コールバック関数を使用する:それはコールバックが真の値を返すものを見つけるまで

function isBigEnough(element) { 
    return element >= 15; 
} 
[12, 5, 8, 130, 44].find(isBigEnough); 

検索方法は、アレイ内に存在する各要素に対して一度コールバック関数を実行します。そのような要素が見つかると、findはその要素の値をすぐに返します。 find機能のパフォーマンスが変化する

、あなたはすべてのarrayを反復処理する必要があるため複雑さが常にO(n)forEachfor、とは対照的に、O(1)、またはO(n)以下とすることができます。

+0

Array.prototype.someとArray.prototype.findは、ある意味では仲間です。「some」は、気楽なタイプの人です。 – axelduch

関連する問題