2017-07-18 3 views
0
let teams = [ 
{ name : 'Patriots' }, 
{ name : 'Dolphins' }, 
{ name : 'Jets' }, 
{ name : 'Bills' } 
] 

let search = (name) => { 
    for(let i = 0; i < teams.length; i++) { 
     if(name === teams[i].name) { 
      return teams[i]; 
     } 
     return false; 
    } 
} 
console.log(search('Patriots')); // returns { name : 'Patriots } 
console.log(search('Dolphins')); // return false 

オブジェクトの配列を検索するための検索関数を作成しようとしています。最初のオブジェクトを検索すると、それが返されます。配列内の他のオブジェクトを検索すると、falseを返します。 for loopを完全に実行してからif else文に移動する方法はありますか?これを行うには良い方法がありますか?オブジェクトの配列を検索する

+3

おかげ@AlexBieg –

+0

すごい外 "falseを返すない" を入れてください。それは私たちの最善を尽くす。 – tin

+0

母心配... forループ –

答えて

3

forループ内から 'return false'を削除する必要があります。これはループが最初の値を通過した後にトリガーされ、2,3,4番目のプロパティ/チームに到達することはありません。

let teams = [ 
    { name : 'Patriots' }, 
    { name : 'Dolphins' }, 
    { name : 'Jets' }, 
    { name : 'Bills' } 
] 

let search = (name) => { 
    for(let i = 0; i < teams.length; i++) { 
     if(name === teams[i].name) { 
      return teams[i]; 
     } 
    } 
    // return 'false' if not found 
    return false 
} 
console.log(search('Patriots')); // returns { name : 'Patriots } 
console.log(search('Dolphins')); // returns { name : 'Dolphins } 
console.log(search('Oranges')); // returns false 

return teams[i];は、一致する値が見つかったらループを停止します。

forループの後にreturn falseを追加しました。チーム名が見つからない場合、関数は「false」を返します。

+2

+1しかし、見つからない場合にfalseを返すことが期待される場合は、forループの後にfalseを追加する必要があります。そのようにして検索すると結果が返されるか、配列全体を反復してからfalseが返されます。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find –

+2

Liamさん、このシナリオを含むように更新された答えを指摘してくれてありがとう。 – NickMcB

1

フィルタリングと縮小を行うことができます。

const teams = [ 
 
    { name : 'Patriots' }, 
 
    { name : 'Dolphins' }, 
 
    { name : 'Jets' }, 
 
    { name : 'Bills' } 
 
] 
 
const search = (arr, s) => arr.filter(({name}) => name === s).reduce((p,{name}) => name || p, false) 
 

 
console.log(search(teams, 'Patriots'))

関連する問題