2016-09-19 3 views
0

J'ai une boucle for qui recherche une valeur dans un tableau dans mon code javascript dans couchDb. Je veux en faire une fonction. Cela devrait être assez simple mais j'ai des problèmes avec ça. Ceci est la boucle (qui fonctionne parfaitement bien):Déclaration d'une fonction de boucle for en javascript

if (newDoc.destination && newDoc.destination.length > 0) { 
    for (var i = 0; i < newDoc.destination.length; i++) { 
     if (newDoc.destination[i].address) return; 
    } 
} 
throw({forbidden: 'doc.address is required'}); 

Et c'est la façon dont j'enveloppai en fonction:

function arrayReq(field, message) { 
    message = message || "Array must have a " + field; 
    if (newDoc.destination && newDoc.destination.length > 0) { 
     for (var i = 0; i < newDoc.destination.length; i++) { 
      if (newDoc.destination[i].field) return; 
     } 
    } 
    throw({forbidden: message}); 
} 

Je pense que le retour de la fonction doit arrêter la fonctionner d'aller plus loin, mais il jette encore l'erreur. Quelqu'un peut-il me dire ce que je fais mal? Btw si je change de champ en adresse cela fonctionne bien. Est-ce que je ne peux pas faire de l'adresse une variable modifiable?

+1

* « Je pense que le retour de la fonction doit arrêter la fonction d'aller plus loin, mais il jette encore l'erreur. » On fait. Si 'newDoc.destination [i] .field' est toujours vrai, cette fonction n'atteindra pas le' throw' à la fin. Donc le problème est ailleurs. –

+0

Note: 'throw 'n'est pas une fonction, il n'est pas nécessaire d'envelopper son opérande dans'() '. Il est généralement préférable de lancer des instances de 'Error', bien que vous puissiez lancer n'importe quel objet. –

+0

Doit être fermé comme doublon de http://stackoverflow.com/questions/4244896/dynamically-access-object-property-using-variable. –

Répondre

2

Je pense que le problème est que vous essayez d'utiliser field en tant que variable de chaîne et une propriété de votre objet dans le tableau destination[].

Dans votre code, si l'objet destination[i] n'a pas de propriété appelée field (pas la valeur de la chaîne de population dans le paramètre field, mais une propriété réelle nommée « champ »), il ne sera jamais évaluée à vrai et sortir de la fonction.

Pour accéder à une propriété d'un objet en utilisant la représentation sous forme de chaîne dans javascript, vous utilisez la syntaxe de l'indexeur.

essayez de le changer array.destination[i].field-array.destination[i][field]

+0

Bien repéré! ... –

+0

Ohh je vois. Merci beaucoup. Je suis assez nouveau pour javascript. – Anna