Esta matriz tiene la clave para sustituir con la clave anidada de 'nombre'
const arr = ['status', 'user', ...] <-- This array contains key to be replaced with nameEste es mi objeto de respuesta actual
[ { "id": 11, "location": "Mumbai", "status": { "name": "NEW" }, "user": { "name": "Rakesh" } } ]¿Cómo modifico la matriz de objetos anterior a esto a continuación?
[ { "id": 11, "location": "Mumbai", "status": "NEW", "user": "Rakesh" } ]puede probar debajo del código
const keys = ['status', 'user'] let arr = [ { "id": 11, "location": "Mumbai", "status": { "name": "NEW" }, "user": { "name": "Rakesh" } } ] arr.map(a => keys.forEach(k => { if(a[k] && a[k].name) a[k] = a[k].name })); console.log(arr);Yo probaría con este:
const results = [ { "id": 11, "location": "Mumbai", "status": { "name": "NEW" }, "user": { "name": "Rakesh" } }, { "id": 12, "location": "Helsinki", "status": { "name": "NEW" }, "user": { "name": "Samuli" } } ]; const flattenObject = ([key, value]) => ((typeof value === 'object') ? {[key] : value[Object.keys(value)[0]]} : {[key]: value}); const reduceToSingleObject = (acc, b) => ({...acc, ...b}); const actualResults = results.map((result) => Object.entries(result).map(flattenObject).reduce(reduceToSingleObject)); console.log(actualResults);Explicación:
flattenObject es una función para aplanar la estructura del objeto dentro del objeto. Esto solo toma el primer accesorio (sin saber el nombre de la clave). Si, por alguna razón, necesita aplanar varios valores-clave, entonces necesitaría un tipo de función de ayuda completamente diferente para solucionarlo.
reduceToSingleObject es una función para poner todos los pares clave-valor en un solo objeto. Esto podría haberse hecho ya en la función flattenObject, pero para mayor claridad, lo separé en un mapa normal: patrón reducido.
actualResults es el resultado donde revisamos todas las entradas de sus resultados originales.