2013-02-06 3 views
0

Je suis nouveau sur Javascript en provenance d'un arrière-plan Python, où il est facile de créer des données imbriquées en utilisant des dictionnaires personnalisés et des méthodes .get. Ce que j'essaie de faire est de créer un objet imbriqué de données d'artiste qui prend ce formulaire: artistDict[artist][albumName] = albumYear. J'ai besoin de créer cet objet à la volée en faisant une itération sur un itérable des objets de l'album. Voici le code que je suis actuellement en utilisant:Créer des objets imbriqués à la volée avec Javascript

albumDict = {}; 
albums.forEach(function(item){ 
albumDict[item.artist][item.name] = item.year; 
}); 
document.write(albumDict); 

Cela ne fonctionne pas, ce qui est pas surprenant, étant donné que quelque chose comme cela ne fonctionnerait pas non plus en Python. Cependant, en Python, je pourrais utiliser une méthode .get pour vérifier si une entrée était dans le dictionnaire et la créer sinon - y at-il quelque chose de similaire, ou tout autre utilitaire que je pourrais utiliser pour atteindre mon objectif dans JS?

+1

Vous devez tester si la propriété existe et si ce n'est pas le cas, initialisez-la. –

Répondre

2

Essayez cette (si la propriété ne vous devez l'initialiser existe pas ..):

albums.forEach(function(item){ 
    albumDict[item.artist] = albumDict[item.artist] || {}; 
    albumDict[item.artist][item.name] = item.year; 
}); 

La première ligne de cette fonction définit albumDict[item.artist] à un nouvel objet s'il n'existe pas encore. Sinon, il le définit à lui-même.

Ensuite, vous pouvez simplement définir l'année sur l'entrée dict.

4

Cela devrait fonctionner:

albumDict = {}; 
albums.forEach(function(item){ 
    albumDict[item.artist] = albumDict[item.artist] || {}; 
    albumDict[item.artist][item.name] = item.year; 
}); 
Questions connexes