Tengo el siguiente código JavaScript
const data = { columnFields: { columnField1: 'FieldValue1', columnField2: 'FieldValue2', columnField3: 'FieldValue3', }, dataSets: [ { columnProp1: 'value1', columnProp2: 'value2', columnProp3: 'value3', }, { columnProp1: 'value11', columnProp2: 'value22', columnProp3: 'value33', }, ], };
Me gustaría ver el resultado de estos datos:
const expectedOutput = [ { FieldValue1: 'value1', FieldValue2: 'value2', FieldValue3: 'value3', }, { FieldValue1: 'value11', FieldValue2: 'value22', FieldValue3: 'value33', }, ];
He intentado la siguiente solución siguiente
function processData() { const processDataSet = []; const obj = {}; data.dataSets.forEach((item) => { for (const key in item) { const element = item[key]; for (const prop in data.columnFields) { obj[data.columnFields[props]] = element; } } processDataSet.push(obj); }); return processDataSet; }
Esto me está dando la salida que no es lo que estoy buscando
const output = [ { FieldValue1: 'value33', FieldValue2: 'value33', FieldValue3: 'value33', }, { FieldValue1: 'value33', FieldValue2: 'value33', FieldValue3: 'value33', }, ];
Es como se esperaba porque cada vez anula el valor y termina con el último valor. Ayúdenme con la dirección del código mediante el cual puedo asignar simultáneamente el valor individual en el bucle.
Object#values
en columnFields
, puede obtener la lista de claves que se usarán en la matriz de objetos resultanteArray#map
, dataSets
sobre conjuntos de datosObject#values
para obtener la lista de valores del objeto actual. Usando Array#reduce
, itere sobre este último para crear un objeto con las claves calculadas al principio y los valores actuales const data = { columnFields: { columnField1: 'FieldValue1', columnField2: 'FieldValue2', columnField3: 'FieldValue3' }, dataSets: [ { columnProp1: 'value1', columnProp2: 'value2', columnProp3: 'value3' }, { columnProp1: 'value11', columnProp2: 'value22', columnProp3: 'value33' } ] }; const { columnFields, dataSets } = data; const keys = Object.values(columnFields); const res = dataSets.map(e => Object.values(e).reduce((acc, value, index) => ({ ...acc, [keys[index]]: value }), {}) ); console.log(res);