JSFiddle - React, Tailwind, and code Playground
JavaScript
const data = {
"id": "example",
"custom_fields": [{
"id": "example",
"name": "Interval",
"type": "drop_down",
"type_config": {
"default": 0,
"placeholder": null,
"options": [{
"id": "example",
"name": "yearly",
"color": null,
"orderindex": 0
}]
},
"date_created": "1611228211303",
"hide_from_guests": false,
"value": 0,
"required": false
},
{
"id": "example",
"name": "Description",
"type": "text",
"type_config": {},
"date_created": "1611228263444",
"hide_from_guests": false,
"value": "Basics of information security\n",
"required": false
},
{
"id": "example",
"name": "Year",
"type": "number",
"type_config": {},
"date_created": "1611228275285",
"hide_from_guests": false,
"value": "2021",
"required": false
}
]
};
// returns fields as heterogenous array, but never with heteorgenous values for the same property
const fields = data.custom_fields.map(x => {
const f = {
id: x.id,
name: x.name
};
f['value_' + x.type] = x.value;
return f;
});
console.log(fields);
/*
[{
id: "example",
name: "Interval",
value_drop_down: 0
}, {
id: "example",
name: "Description",
value_text: "Basics of information security↵"
}, {
id: "example",
name: "Year",
value_number: "2021"
}]
*/
// returns fields as homogenous array
const fields2 = data.custom_fields.map(x => {
const f = {
id: x.id,
name: x.name,
value_text: x.type === 'text' ? x.value : null,
value_number: x.type === 'number' ? parseInt(x.value, 10) : null,
value_dropdown: x.type === 'drop_down' ? x.type_config.options.find(o => o.orderindex === x.value).name : null
};
f['value_' + x.type] = x.value;
return f;
});
console.log(JSON.stringify(fields2));
/*
[{
"id": "example",
"name": "Interval",
"value_text": null,
...