En un navegador que soporte ES5 - o donde usted agregó un shim para ello:
var stuff = {
"fruit" : ["mango","orange"],
"veg" : ["carrot"]
}
var array = Object.keys(stuff).map(function(key) {
return {"type" : key, "name" : stuff[key] }
})
Ver: Object.keys, Array's map
O, en la manera antigua:
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] })
}
}
Tenga en cuenta que en ambos casos el valor de la matriz se comparte porque en JS los objetos se pasan por referencia. Por lo tanto, por ejemplo, stuff["fruit"]
y array[0].name
apunta a la misma referencia de la matriz ["mango", "orange"]
. Es decir, si se cambia uno de ellos, el otro se cambiará así:
stuff["fruit"].push("apple");
alert(array[0].name); // "mango", "orange", "apple"
Para evitar esto, se puede utilizar slice tener una copia profunda de un nivel de la matriz. Así que en el código anterior, en lugar de:
"name" : stuff[key]
tendrá:
"name" : stuff[key].slice(0)
espero que ayude.
me gustaría saber cómo hacer las dos cosas .. – Sam
favor, recuerde proporcionar siempre un cierto código identation, se hace la pregunta más fácil de leer – fcalderan
gracias por la edición ... lo recordará en tiempo nxt .. – Sam