Dans un navigateur qui prend en charge ES5 - ou si vous avez ajouté un shim pour elle:
var stuff = {
"fruit" : ["mango","orange"],
"veg" : ["carrot"]
}
var array = Object.keys(stuff).map(function(key) {
return {"type" : key, "name" : stuff[key] }
})
Voir: Object.keys, Array's map
Ou, à l'ancienne mode:
var stuff = {
"fruit" : ["mango","orange"],
"veg" : ["carrot"]
}
var array = []
for (var key in stuff) {
if (stuff.hasOwnProperty(key)) {
array.push({"type" : key, "name" : stuff[key] })
}
}
Veuillez noter que dans les deux cas la valeur du tableau est partagée car dans JS les objets sont passés par référence. Ainsi, par exemple, stuff["fruit"]
et array[0].name
points à la même référence du tableau ["mango", "orange"]
. Cela signifie, si vous changez un d'eux, l'autre sera changé ainsi:
stuff["fruit"].push("apple");
alert(array[0].name); // "mango", "orange", "apple"
Pour éviter cela, vous pouvez utiliser slice d'avoir une copie en profondeur d'un niveau de votre tableau. Ainsi, dans le code ci-dessus, au lieu de:
"name" : stuff[key]
vous aurez:
"name" : stuff[key].slice(0)
Hope it helps.
Je voudrais savoir comment le faire dans les deux sens .. – Sam
s'il vous plaît, souvenez-vous de toujours fournir une indentation de code, il est plus facile de lire la question – fcalderan
merci pour l'édition ... se souviendra de l'heure nxt .. – Sam