web-dev-qa-db-fra.com

Pourquoi "forEach n'est pas une fonction" pour cet objet?

C'est probablement quelque chose de vraiment stupide, mais je ne comprends pas pourquoi cela ne fonctionne pas.

var a = {"cat":"large"};

a.forEach(function(value, key, map){
    console.log(value);
});

Uncaught TypeError: a.forEach n'est pas une fonction

http://jsfiddle.net/ty7z6pse/

21
haventchecked

L'objet n'a pas forEach, il appartient à Array prototype . Si vous souhaitez parcourir chaque paire clé-valeur de l'objet et récupérer les valeurs. Tu peux le faire:

Object.keys(a).forEach(function (key){
    console.log(a[key]);
});

Note d'utilisation: pour un objet v = {"cat":"large", "dog": "small", "bird": "tiny"};, Object.keys(v) vous donne un tableau des clés afin que vous obteniez ["cat", "chien", "oiseau"]}

42
TaoPR

Quand j'ai essayé d'accéder au résultat de 

Object.keys(a).forEach(function (key){ console.log(a[key]); });

il s'agissait d'un résultat en texte brut sans paire clé-valeur Voici un exemple 

var fruits = {
    Apple: "fruits/Apple.png",
    banana: "fruits/banana.png",
    watermelon: "watermelon.jpg",
    grapes: "grapes.png",
    orange: "orange.jpg"
}

Maintenant, je veux obtenir tous les liens dans un tableau séparé, mais avec ce code 

    function linksOfPics(obJect){
Object.keys(obJect).forEach(function(x){
    console.log('\"'+obJect[x]+'\"');
});
}

le résultat de : 

linksOfPics(fruits)



"fruits/Apple.png"
 "fruits/banana.png"
 "watermelon.jpg"
 "grapes.png"
 "orange.jpg"
undefined

J'ai compris celui qui résout ce que je cherche 

  console.log(Object.values(fruits));
["fruits/Apple.png", "fruits/banana.png", "watermelon.jpg", "grapes.png", "orange.jpg"]
0
Ahmed Younes