Erreur lors de l'appel forEach sur le tableau
J'ai un problème forEach dans anoter forEach fonction:
La results
variable contient un objet comme:
{
names: [
'Someone',
'Someone else'
],
emails: [
'[email protected]'
'[email protected]'
]
}
Je le veux pour se détendre tous les tableaux et le résultat dans un tableau comme ceci:
[
{term: 'Someone', type: 'names'},
...
]
Voici mon code:
var keys = _.keys(results);
console.log(keys);
var finalResult = [];
keys.forEach( function (key) {
var arrTerms = results[key];
console.log(key, arrTerms); //arrTerms prints fine
arrTerms.forEach(function (term) { //This line throws an exception
finalResult.push({
term: term,
type: key
});
});
});
Imbriquée appel à forEach jette l'exception suivante:
TypeError: Uncaught error: Cannot call method 'forEach' of undefined
J'ai essayé à l'aide d'une boucle for à l'itération jusqu'à la longueur, mais il a généré une autre exception:
TypeError: Uncaught error: Cannot read property 'length' of undefined
- Essayez,
console.log(key, arrTerms, Array.isArray(arrTerms));
- Le code tel qu'il est fonctionne très bien pour moi (à l'exception de votre manque une virgule dans votre définition de tableau). Ce n'
results
effectivement ressembler? - Il imprime typeOf comme Objet
- Désolé, essayez
Array.isArray
. J'ai édité le commentaire Array.isArray(arrTerms)
retournetrue
- J'ai posté la structure des résultats dans le début de la question
- Vous pourriez avoir quelque chose qui s'étend
Object.prototype
. Quelle est la valeur dekeys
? (aussi, siarrTerms
estundefined
,Array.isArray
ne peut pas retournertrue
).
Vous devez vous connecter pour publier un commentaire.
Je pense que le problème ici est que vous avez peut affecter undefined à votre arrTerms (lorsque les résultats[key] renvoie undefined cause de vous prendre une clé qui n'est pas contenue dans votre objet). Essayez de faire ceci:
attTerms
siresults[key]
estundefined
?arrTerms.forEach
même siresults[key]
est pas défini.forEach
sousif (arrTerms)
. Undefined clés n'apparaissent pas à l'aide de NSLog, mais existent toujours pour le trait de Soulignement.Les touches() pour trouver!Object.keys
, obtiendrez tous les noms des propriétés de l'objet. Donc, si vous avez{foo: undefined}
, puis vous obtenez des['foo']
. Il semble donc que, après tout, vous n'avez pas de poste de la structure réelle de l'objet 😛 je me demande pourquoi ne pas l'attraper que, depuis que vous avez appeléconsole.log(keys);
déjà.