2017-08-29 9 views
0

D'abord, merci d'avance pour toute réponse à ce problème. Je suis nouveau à JS et je pense que ce code devrait être assez simple, mais il ne fonctionne pas comme prévu. Je veux rechercher dans ces objets dans la matrice par nom, et si le nom (qui est obtenu par l'invite) est trouvé dans le tableau, je veux afficher l'ID de cet objet. Si je tape «Jef» dans l'invite, j'obtiens l'ID; mais si je tape 'Steve' ou 'Ryan' je n'ai rien. J'ai aussi remarqué que la boucle semble se terminer peu importe ce que je tape sans qu'une pause soit ajoutée. Je pense que la boucle est en train de se rompre, mais je ne sais pas ce qui l'amène à se casser avant que la condition 'Si' soit remplie. S'il vous plaît aider!Comment utiliser l'entrée d'invite pour parcourir une série d'objets et afficher une propriété

var array = [{ 
 
    name: 'Jef', 
 
    age: 29, 
 
    id: '000' 
 
    }, { 
 
    name: 'Steve', 
 
    age: 28, 
 
    id: '001' 
 
    }, 
 
    { 
 
    name: 'Ryan', 
 
    age: 28, 
 
    id: '002' 
 
    } 
 
]; 
 

 
var i; 
 

 
for (i = 0; i < array.length; i++) { 
 
    if (prompt() == array[i].name) { 
 
    console.log(array[i].id) 
 
    } 
 
}

+0

Lorsque vous tapez les noms dans l'ordre défini, j'obtiens toutes les réponses attendues. Y avait-il une raison pour laquelle vous vouliez l'invite en boucle? La boucle ne se termine pas pour moi comme vous le décrivez. – spanky

+0

Vous avez peut-être coché la case "Empêcher cette page de créer des boîtes de dialogue supplémentaires" dans la fenêtre d'invite? – spanky

Répondre

0

essayer. Vous devez trier votre tableau et effectuer une correspondance forte, puis renvoyer l'ID.

function NameExists(strName,objectArray) 
{ 
    //convert to lower for type sensitive 
    strName = strName.toLowerCase(); 
    for(var i = 0; i <objectArray.length; i++) 
    { 
     //convert to lower for type sensitive 
     var comparison = objectArray[i].Name.toLowerCase(); 

     if(comparison.match(strName)==comparison) 
      return objectArray[i].id; 
    } 
} 
+0

Merci pour votre aide. C'est grandement apprécié! –

1

La façon dont vous le faites est proche. Vous avez juste besoin de mettre le prompt() en dehors de la boucle. Une fois que vous avez l'entrée à rechercher, vous parcourez ensuite tout votre tableau d'objets.

Par exemple:

var nameInput = prompt(); 
for (i =0; i < array.length; i++){ 
    if (nameInput == array[i].name) { 
     console.log(array[i].id) 
    } 
} 

Petite explication

Étant donné que votre message est dans une boucle qui boucle également votre tableau d'objets, il ne peut y avoir de réponse 1 de « correcte » à ce point rapide donné - quel que soit l'index (array[i].name), la boucle est actuellement activée.

Pour voir plus de ce que je veux dire exécuter votre code actuel et le type jef la première fois l'invite arrive, Steve la deuxième fois, et le troisième Ryan de temps de cette façon obtient vos identifiants, mais est sans doute pas votre résultat escompté .