2017-02-06 7 views
1

/*以下の機能をご覧ください。そのシンプルな機能。ムービー配列を繰り返し処理して要素を返すようにしたい。要素のタイトルが渡された引数とまったく同じ場合のみ、それ以外の場合は反復の最後にfalseを返します。
問題は、常にfalseを返すことです。しかし、私はforEachループの代わりに通常のforloopを使用する場合、それは完璧に正常に動作します..誰かがなぜこの状況はどうか説明してください??????前もって感謝します。あなたがforEachforEachに渡されたコールバックの内側から戻っている は、*/forEach対forループ? forループはうまくいくようですが、forEachではできません。どうして?誰か説明できますか?

function searchMovies(title) { 
    movies.forEach(function(ele){ 
     if(ele.title === title){ 
      return ele; 
     } 
    }); 
return false; 
} 

//movies array 
var movies = [ 
    {title: 'The Hobbit'}, 
    {title: 'The Great Gatsby'}, 
    {title: 'Gone with the Wind'} 
]; 

//the following line calls the function 
searchMovies('The Great Gatsby'); 

答えて

3

たびに無視し、次の要素へのコールバックを呼び出します。何が必要、このようなfindを使用することです:

function searchMovies(title) { 
    var found = movies.find(function(ele){ 
     return ele.title === title; 
    }); 
    return found; // found will be either and item from the array (if find found something) or undefined (if it doesn't) 
} 

注1:movies配列は、いずれかの機能searchMovies前に定義された、またはパラメータ(最善のアプローチ)としてそれを渡す必要があります。

注2:あなたはすべての一致した要素の配列を返すようにしたい(配列内の重複がある場合、あなたはそれらのすべてを返すようにしたい)場合は、その後、filterを使用し、同じように使用されていると一致したすべての要素の配列を返します(一致しない場合は空の要素を返します)。

1

あなたはforEachの関数内で返していますので。

function searchMovies(title) { 
    var foundMovie = false; 
    movies.forEach(function(ele) { 
     if (ele.title === title) { 
      foundMovie = ele; 
     } 
    }); 
    return foundMovie; 
} 
+3

注、これはあります**最後**代わりに一致**最初** – Phil

+0

@Phil所望されず、見つかった要素が最初にアレイ全体をループであったであろう場合であってもインデックス! –

+0

@ Philとibrahim、あなたは正しいです。私はちょうどそれらが試みたforEachを使用してそれを働かせる方法をそれらに示していた:) –

関連する問題