Tengo un objeto que se parece a esto:
const data = { students: [{ code: '1', number: '22', type: 'regular', name: 'john', age: '11', class: 'A', }, { code: '2', number: '23', type: 'regular', name: 'steve', age: '12', class: 'B', }], teachers: [{ code: '22', number: '101', type: 'intern', name: 'mac', }, { code: '23', number: '102', type: 'perm', name: 'jess', }], };Tiene diferentes claves y valores.
Aquí, estoy tratando de masajear estos datos para poder obtener el siguiente resultado: Así que estoy tratando de obtener una matriz que tendrá solo datos de estudiantes y otra que tendrá datos de maestros de una función en sí.
const result1 = [{ code: '1', number: '22', type: 'regular', name: 'john', }, { code: '2', number: '23', type: 'regular', name: 'steve', }]; const result2 = [{ code: '22', number: '101', type: 'intern', name: 'mac', }, { code: '23', number: '102', type: 'perm', name: 'jess', }];lo que probé es:
const getData = ({data = []}) => { data?.map({ code, number, regular, name } ) => { return{ code, number, regular, name }} } getData(data.students) getData(data.teachers) // How do get this data in one function call itselfEsto me da el resultado, pero para esto necesito llamar a esta función dos veces, una para estudiantes y otra para profesores. Quiero llamar a esta función una vez.
Gracias
Podría mapear nuevas entradas del objeto y tomar la nueva estructura mapeada.
const data = { students: [{ code: '1', number: '22', type: 'regular', name: 'john', age: '11', class: 'A' }, { code: '2', number: '23', type: 'regular', name: 'steve', age: '12', class: 'B' }], teachers: [{ code: '22', number: '101', type: 'intern', name: 'mac' }, { code: '23', number: '102', type: 'perm', name: 'jess' }] }, getData = ({ code, number, regular, name }) => ({ code, number, regular, name }), result = Object.fromEntries(Object .entries(data) .map(([k, v]) => [k, v.map(getData)]) ); console.log(result); .as-console-wrapper { max-height: 100% !important; top: 0; }Dado que a partir de los datos proporcionados, parece que el OP quiere map principalmente un determinado conjunto de propiedades de los elementos de estudiante/maestro de un mapa/objeto, un enfoque posible es reduce las entries del objeto de data y aplicar el mapeo exclusivamente para students coincidentes. o claves de teachers , cada una de las cuales hace referencia a un valor de tipo matriz válido.
const data = { students: [{ code: "1", number: "22", type: "regular", name: "john", age: "11", class: "A" }, { code: "2", number: "23", type: "regular", name: "steve", age: "12", class: "B" }], teachers: [{ code: "22", number: "101", type: "intern", name: "mac" }, { code: "23", number: "102", type: "perm", name: "jess" }], }; const { students: result1, teachers: result2, } = Object .entries(data) .reduce((result, [key, value]) => { if ( // process only for a matching key ... (/^students|teachers$/).test(key) // ... and a valid value type. && Array.isArray(value) ) { result[key] = value .map(({ code, number, type, name }) => ({ code, number, type, name }) ); } return result }, {}); console.log({ result1, result2 }); .as-console-wrapper { min-height: 100%!important; top: 0; }No estoy seguro de qué uso tiene esto, pero como desea ejecutar una función dos veces y obtener dos resultados, hágalo y combínelo en un objeto:
const data = { students: [{ code: '1', number: '22', type: 'regular', name: 'john', age: '11', class: 'A' }, { code: '2', number: '23', type: 'regular', name: 'steve', age: '12', class: 'B' }], teachers: [{ code: '22', number: '101', type: 'intern', name: 'mac' }, { code: '23', number: '102', type: 'perm', name: 'jess' }] }; const transformData = (data = []) => data.map(({ code, number, regular, name }) => ({ code, number, regular, name })); const getData = (data) => ({ students: transformData(data.students), teachers: transformData(data.teachers) }); console.log(getData(data)); .as-console-wrapper { max-height: 100% !important; top: 0; } Nota: Modifiqué la función transformData para eliminar algo de sintaxis adicional y para eliminar el encadenamiento opcional ya que la versión antigua de Babel de Stack Snippets no lo admite.
Además, no hay ninguna propiedad denominada regular en los objetos originales de la matriz, por lo que quedan sin definir.