Tengo un objeto como este:
{ name: 'ABC', age: 12, timing: '2021-12-30T11:12:34.033Z' }
Quiero hacer una matriz de objetos de cada tecla del objeto anterior como este:
[ { fieldName: 'name', dataType: 'string' }, { fieldName: 'age', dataType: 'number' }, { fieldName: 'timing', dataType: 'date' } ]
Intenté esto:
let op = Object.entries(data).map(([key, value]) => ({ fieldName: key, dataType: typeof value }));
pero obteniendo tipo de datos: 'objeto' para la columna de fecha pero no puedo lograrlo. ¿Hay alguna solución? Gracias por adelantado.
Puede usar el análisis de fecha para verificar si es una fecha válida o no.
const input = { name: 'ABC', age: 12, timing: '2021-12-30T11:12:34.033Z' }; const output = Object.entries(input).map(([key, value]) => ({ fieldName: key, dataType: typeof value === 'string' && !isNaN(Date.parse(value)) ? 'date':typeof value })); console.log(output);
Puede usar Object#entries
con Array#map
y typeof
para obtener el tipo de valor. Para el caso en que se deba usar 'date'
para marcas de tiempo válidas, podría usar el método Date.parse()
con Number#isNaN
.
Prueba lo siguiente
const input = { name: 'ABC', age: 12, timing: '2021-12-30T11:12:34.033Z' }; const output = Object.entries(input).map(([key, value]) => ({ fieldName: key, dataType: typeof value !== 'string' || isNaN(Date.parse(value)) ? typeof value : 'date' })); console.log(output);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Editar: Reemplazar Object#values
con Object#entries
.
Edición 2: ¡Agregue typeof value !== 'string'
para la dataType
de tipo de datos. Tomado de la respuesta de @RahulSharma.
Puede usar Object.keys()
y Array.prototype.map()
:
const ip = { name: 'ABC', age: 12, timing: '2021-12-30T11:12:34.033Z' }; const op = Object.keys(ip).map((key) => ({ fieldName: key, dataType: typeof ip[key] === 'string' && !isNaN(Date.parse(ip[key])) ? 'date' : typeof ip[key] })); console.log(op);