Aporte
data = [ { "name": "AAA", "uuid": "111", "zone": "A"}, { "name": "BBB", "uuid": "222", "zone": "B"}, { "name": "CCC", "uuid": "333", "zone": "C"}, ]
Salida deseada
data = [ { "AAA": {"uuid": "111", "zone": "A"}, "BBB": {"uuid": "222", "zone": "B"}, "CCC": {"uuid": "333", "zone": "C"}, } ]
Intenté esto,
data = [ { "name": "AAA", "uuid": "111", "zone": "A"}, { "name": "BBB", "uuid": "222", "zone": "B"}, { "name": "CCC", "uuid": "333", "zone": "C"}, ]; data = data.map( o => new Object({"uuid": o.uuid, "zone": o.zone})); console.log(data);
da
[ { uuid: "111", zone: "A" }, { uuid: "222", zone: "B" }, { uuid: "333", zone: "C" } ]
Quiero que el campo "nombre" sea la clave para cada objeto.
Las partes de la salida que corresponden a la entrada están todas dentro de un solo elemento en una matriz, por lo tanto, mapee dentro de una matriz literal. Extraiga la propiedad de name
al realizar la asignación y devuelva un objeto cuya clave sea esa propiedad, y el valor es el resto de lo que hay en el objeto (con sintaxis de descanso).
const input = [ { "name": "AAA", "uuid": "111", "zone": "A"}, { "name": "BBB", "uuid": "222", "zone": "B"}, { "name": "CCC", "uuid": "333", "zone": "C"}, ]; const output = [input.map(({ name, ...rest }) => ({ [name]: rest }))]; console.log(output);
Array#reduce es otra forma de iterar su matriz. Puedes crear un objeto con los nombres como claves.
let data = [{ "name": "AAA", "uuid": "111", "zone": "A"}, { "name": "BBB", "uuid": "222", "zone": "B"}, { "name": "CCC", "uuid": "333", "zone": "C"}]; data = data.reduce((b,a) => ({...b, [a.name]: {"uuid": a.uuid, "zone": a.zone}}), {}); console.log(data);
Producción:
{ "AAA": { "uuid": "111", "zone": "A" }, "BBB": { "uuid": "222", "zone": "B" }, "CCC": { "uuid": "333", "zone": "C" } }
Puede usar la sintaxis de desestructuración de objetos para lograr esto fácilmente.
Usando sus datos originales:
let data = [ { "name": "AAA", "uuid": "111", "zone": "A" }, { "name": "BBB", "uuid": "222", "zone": "B" }, { "name": "CCC", "uuid": "333", "zone": "C" } ];
Cree un nuevo Objeto para contener nuestros datos reestructurados:
let records = {};
Aquí desestructuramos cada objeto de datos asignando la propiedad de name
a su propia variable y las propiedades restantes al nuevo Objeto r
con el operador de propagación ( ...
). Luego podemos usar la notación de corchetes para asignar los datos al objeto de records
por nombre:
data.forEach(({ name, ...r }) => records[name] = r);
Si comprobamos el objeto de records
:
console.log(records); { AAA: { uuid: "111", zone: "A" }, BBB: { uuid: "222", zone: "B" }, CCC: { uuid: "333", zone: "C" } }
records
no es una matriz y no se puede acceder a ella por índice.
console.log(records[0]); // undefined
Pero ahora puede ser referenciado por clave:
console.log(records['AAA']); // { uuid: "111", zone: "A" } console.log(records.BBB); // { uuid: "222", zone: "B" }
Si desea absolutamente sus datos como un objeto anidado dentro de una matriz:
data = [records];