I have an object like this:
{
name: 'ABC',
age: 12,
timing: '2021-12-30T11:12:34.033Z'
}
I want to make array of object of each key of above object like this:
[
{
fieldName: 'name',
dataType: 'string'
},
{
fieldName: 'age',
dataType: 'number'
},
{
fieldName: 'timing',
dataType: 'date'
}
]
I tried this:
let op = Object.entries(data).map(([key, value]) => ({
fieldName: key,
dataType: typeof value
}));
but getting dataType: 'object' for date column but not able to achieve it. Is there any solution? Thanks in advance.
You can use date parse to check is a valid date or not.
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);
You could use Object#entries
with Array#map
and typeof
to the get the type of the value. For the case where 'date'
must be used for valid time stamps, you could use Date.parse()
method with Number#isNaN
.
Try the following
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; }
Edit: Replace Object#values
with Object#entries
.
Edit 2: Add typeof value !== 'string'
for dataType
condition. Borrowed from @RahulSharma's answer.
You can use Object.keys()
and 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);