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);