Tengo una matriz como:
[ { "_id": "62434e4c52a870a3840f40fd", "Nome": [ { "_id": "61f76c3c7a308dd136f1d33a", "value": "Oo", "updatedAt": "2022-05-04T00:00:00.000Z" } ], "Peso": [ { "_id": "61f92ec87a308dd136c0e182", "value": "554", "updatedAt": "2022-05-04T00:00:00.000Z" } ], "createdAt": [ { "value": "29/03/2022 03:22:02" } ] }, { "_id": "62449de6ed196e40cb4309ae", "Nome": [ { "_id": "61f76c3c7a308dd136f1d33a", "value": "Ssg", "updatedAt": "2022-05-04T00:00:00.000Z" } ], "Peso": [ { "_id": "61f92ec87a308dd136c0e182", "value": "255", "updatedAt": "2022-05-04T00:00:00.000Z" } ], "createdAt": [ { "value": "29/03/2022 03:23:26" } ] }, ], Con lo que tengo problemas es con el bucle entre cada objeto ejemplo Nome , Peso ¡los nombres de estas matrices son dinámicos y no tienen un nombre estático!
Ejemplo de lo que estoy pensando:
[ { "_id": "62434e4c52a870a3840f40fd", "Nome": "Oo", "Peso": "554", "createdAt": "29/03/2022 03:22:02" }, { "_id": "62449de6ed196e40cb4309ae", "Nome": "Ssg", "Peso": "255", "createdAt": "29/03/2022 03:23:26" } ],gracias por la ayuda
Si cada conjunto de propiedades Nome , Peso , createdAt siempre tiene un elemento, entonces puede usar Array#map de la siguiente manera:
const input = [ { "_id": "62434e4c52a870a3840f40fd", "Nome": [ { "_id": "61f76c3c7a308dd136f1d33a", "value": "Oo", "updatedAt": "2022-05-04T00:00:00.000Z" } ], "Peso": [ { "_id": "61f92ec87a308dd136c0e182", "value": "554", "updatedAt": "2022-05-04T00:00:00.000Z" } ], "createdAt": [ { "value": "29/03/2022 03:22:02" } ] }, { "_id": "62449de6ed196e40cb4309ae", "Nome": [ { "_id": "61f76c3c7a308dd136f1d33a", "value": "Ssg", "updatedAt": "2022-05-04T00:00:00.000Z" } ], "Peso": [ { "_id": "61f92ec87a308dd136c0e182", "value": "255", "updatedAt": "2022-05-04T00:00:00.000Z" } ], "createdAt": [ { "value": "29/03/2022 03:23:26" } ] } ]; const output = input.map(({_id,...rest}) => ({ _id, ...Object.fromEntries( Object.entries(rest).map(([k,v]) => [k,v[0].value]) ) })); console.log( output );Si considera que esas claves dinámicas tendrán una matriz, intente debajo del código.
const data = [{ "_id": "62434e4c52a870a3840f40fd", "Nome": [{ "_id": "61f76c3c7a308dd136f1d33a", "value": "Oo", "updatedAt": "2022-05-04T00:00:00.000Z" }], "Peso": [{ "_id": "61f92ec87a308dd136c0e182", "value": "554", "updatedAt": "2022-05-04T00:00:00.000Z" }], "createdAt": [{ "value": "29/03/2022 03:22:02" }] }, { "_id": "62449de6ed196e40cb4309ae", "Nome": [{ "_id": "61f76c3c7a308dd136f1d33a", "value": "Ssg", "updatedAt": "2022-05-04T00:00:00.000Z" }], "Peso": [{ "_id": "61f92ec87a308dd136c0e182", "value": "255", "updatedAt": "2022-05-04T00:00:00.000Z" }], "createdAt": [{ "value": "29/03/2022 03:23:26" }] }, ]; data.map(d => { Object.keys(d).forEach(k => { if (Array.isArray(d[k]) && d[k].length > 0) d[k] = d[k][0].value; }); }); console.log(data);La siguiente puede ser una posible solución para lograr el objetivo deseado.
Fragmento de código
const transformArr = arr => ( arr.map(obj => ({ ...Object.fromEntries( Object.entries(obj) .map(([k, v]) => { if (v && v.length > 0 && Array.isArray(v) && "value" in v[0] ) { return [k, v[0].value] } else { return [k, v] } }) ) })) ); const origArr = [ { "_id": "62434e4c52a870a3840f40fd", "Nome": [ { "_id": "61f76c3c7a308dd136f1d33a", "value": "Oo", "updatedAt": "2022-05-04T00:00:00.000Z" } ], "Peso": [ { "_id": "61f92ec87a308dd136c0e182", "value": "554", "updatedAt": "2022-05-04T00:00:00.000Z" } ], "createdAt": [ { "value": "29/03/2022 03:22:02" } ] }, { "_id": "62449de6ed196e40cb4309ae", "Nome": [ { "_id": "61f76c3c7a308dd136f1d33a", "value": "Ssg", "updatedAt": "2022-05-04T00:00:00.000Z" } ], "Peso": [ { "_id": "61f92ec87a308dd136c0e182", "value": "255", "updatedAt": "2022-05-04T00:00:00.000Z" } ], "createdAt": [ { "value": "29/03/2022 03:23:26" } ] }, ]; console.log(transformArr(origArr));Explicación
Object.entries() y Object.fromEntries() para extraer pares clave-valor [k, v] (como matrices) y luego volver a crear (la matriz de pares clave-valor nuevamente en un) objetov es una matriz y si tiene un elemento en el índice 0 con un value propvalue (del elemento índice-0)v tal cualRestricción
Si la matriz interna (para "Nomo", "Peso" u otras "claves dinámicas") tiene más de un elemento, solo se considerará el value del elemento índice-0.
NOTA
Esta solución no muta la matriz original. Crea una nueva copia y, si es necesario, puede reasignarse a la matriz original.