Hay alrededor de un millón de preguntas (y respuestas) sobre este tema, pero ninguna de ellas está haciendo lo que necesito hacer. Tengo un objeto JSON donde el valor de cada clave es un objeto. Quiero convertir esto en una matriz y mantener las claves de nivel superior.
{ "someKey1": { active: true, name: "foo" }, "someKey2": { active: false, name: "bar" } }Si uso Object.keys(), obtengo las claves de nivel superior, pero no sus valores. Si uso Object.values(), obtengo una matriz con todos los valores, pero no sus claves. Estoy tratando de usar claves y mapas, pero solo obtengo los valores devueltos:
const data = { "someKey1": { active: true, name: "foo" }, "someKey2": { active: false, name: "bar" } } const items = Object.keys(data).map(function(key) { return data[key]; }); // returns [{active: true, name: foo},{active: false, name: bar}]¿Hay alguna manera de conseguir ambos? Quiero obtener una matriz sobre la que pueda iterar que se vea así:
[{ key: someKey1, active: true, name: "foo" }, { key: someKey2, active: true, name: "foo" }] OR [ "someKey1": { active: true, name: "foo" }, "someKey2": { active: false, name: "bar" } ]Creo que va en la dirección correcta, si desea agregar la propiedad "clave", debe asignar las propiedades manualmente y para la segunda opción, ya que no necesita la propiedad "clave", se puede hacer un poco más elegantemente:
Para la primera opción:
Object.keys(data).map(v => ({ key: v, ...data[v] }));Para la segunda opción aún más simple:
Object.keys(data).map(v => ({[v]: {...data[v]}}))Puede asignar fácilmente sus datos a un nuevo objeto:
Object.keys(data).map(key => ({ ...data[key], "key": key }));