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 

J'essaie d'écrire une fonction de recherche pour rechercher un tableau d'objets. Quand je cherche le premier objet, il le renvoie. Lorsque je recherche un autre objet dans le tableau, il renvoie false. Existe-t-il un moyen d'exécuter complètement le for loop avant de passer à mes instructions if else ou existe-t-il une meilleure façon de procéder?Recherche d'un tableau d'objets

+3

Mettre le "return false" en dehors de la boucle –

+0

wow ... thanks – tin

+0

Haha pas de soucis. Ça arrive aux meilleurs d'entre nous. –

Répondre

3

Vous devez supprimer 'return false' de la boucle for, cela se déclenche après que la boucle a traversé la première valeur afin qu'elle n'atteigne jamais les 2,3,4th property/teams.

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]; arrêtera la boucle de continuer une fois qu'il a trouvé une valeur correspondante.

J'ai ajouté return false après la boucle for, donc si le nom de l'équipe n'est pas trouvé, la fonction retournera 'false'.

+2

+1 mais si l'on s'attend à ce qu'il renvoie false s'il n'est pas trouvé, vous devez ajouter return false après la boucle for. Ainsi, la recherche renvoie le résultat ou itère sur le tableau, puis renvoie false. Je suggère également d'utiliser https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find –

+2

Merci de souligner que sur Liam, j'ai mis à jour la réponse pour inclure ce scénario. – NickMcB

1

Vous pouvez le faire avec un filtre et réduire.

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'))