J'ai une fonction qui itère via une gamme d'objets et renvoie un modèle de modèle qui saisit une valeur de propriété (nom) et une valeur de propriété qui est une méthode de fonction (c'est-à-dire. Move / Combien de marches ils vont prendre) La méthode .Move utilise Math.Random pour choisir un nombre aléatoire d'étapes et renvoyer cette valeur. Cependant, dans certains objets, la propriété de déplacement est définie comme un entier tel que 1 ou 2 au lieu d'un nombre aléatoire.
Y a-t-il un moyen de modifier mon J'ai essayé d'utiliser une déclaration si d'autre à l'intérieur de ma période de mon moment indique P> qui retourne les objets qui ont des valeurs .Move définies comme des entiers correctement mais ne reviennent pas Numéros aléatoires pour les objets qui ont .Move (). p> en ce moment, la fonction irarai via une gamme d'objets qui ont erreur type de FitnessTest code> de sorte qu'il accepte à la fois le .Move () code> et .move code>? p> .Move () Code> En tant que fonction qui génère un nombre aléatoire et renvoie la chaîne appropriée, mais les objets qui ont. Move définie comme un entier, cela me donnera simplement un P>
arayobject [i] .Move code> n'est pas une fonction p>
blockQuote> p>
3 Réponses :
1. 2.
Vous devez tester si la propriété typeof code> renvoie une valeur de chaîne, vous devez comparer contre une chaîne de types JavaScript. P>
Déplacer code> d'un seul élément de ArrayObject code> est une fonction, pas arayobject code> lui-même: p>
typeof arayobject [i] .move == 'fonction' code> p>
Cela devrait être un commentaire. Veuillez patienter jusqu'à ce que vous ayez assez de privilège pour commenter
vérifier Modifiez votre code sur: P> typeof code> élément de tableau mais pas la variable de tableau. while (steps <= 20) {
if (typeof arrayObject[i].move === "function") {
steps += arrayObject[i].move();
turns++;
} else if (typeof arrayObject[i].move === "number")
steps += arrayObject[i].move;
turns++
Vous pouvez utiliser l'opérateur ternaire pour votre objectif et peut avoir un code plus élégant. P> typeof code> vous donne une chaîne, vous devez donc l'assimiler avec une chaîne à l'aide de "" code>. Comparez également la propriété déplacer code> et non l'objet lui-même. while (steps <= 20) {
steps += typeof arrayObject[i].move === "function" ? arrayObject[i].move() : arrayObject[i].move;
turns++;
}
typeof ArrayObject == fonction code> doit êtretypeof arayobject [i] .Move == fonction code>typeof ArrayObject code> vous donnera le type dearrayObject code> ...arayobject [i] .Move code> n'est pas le même type quearayobject < / code> évidemment