Estoy obteniendo datos de una API, algunos campos no son obligatorios, por lo tanto, no están definidos en el objeto de respuesta
Me gustaría asignar un valor vacío predeterminado como null '' [] a los parámetros de mi objeto si dichos campos no están definidos en la respuesta, hasta ahora esto es lo que tengo (tengo más campos para buscar pero me detuve en 5 para este ejemplo)
await axios.get('https://myurl.com').then( async (response) => { await Promise.all(response.data.map(async (commerce) => { let options = { // BASE INFO field1: commerce.field1[0].value, field2 : commerce.field2[0].value, field3 : commerce.field3[0].value, field4 : commerce.field4[0].value, field5 : commerce.field5[0].value, } const default_options = { // BASE INFO field1: null, field2 : '', field3 : '', field4 : [], field5 : null, } const commerceObj = Object.assign({}, default_options, options) })); }); Recibo un error si un campo no tiene valor, por ejemplo commerce.field2[0] is undefined porque la respuesta de la API no lo incluye, lo que estoy buscando sería una forma eficiente de hacer algo como
field2 : if(commerce.field2[0].value) { commerce.field2[0].value } else {''}
Como tengo muchos campos, realmente no deseo tener muchos if en mi código lo único que pude encontrar que podría ayudarme es Object.assign() pero no ayudó mucho
Puede usar el operador condicional (ternario).
Sintaxis: condition ? exprIfTrue : exprIfFalse
let options = { field1: commerce.field1[0].value ? commerce.field1[0].value : '', ... }Eche un vistazo al uso de @babel/plugin-proposal-optional-chaining , esto le permitiría hacer algo como:
const field1 = commerce?.field1[0]?.value También puede buscar en _.get :
const field1 = _.get(commerce, 'field[0].value', null)Si no, tendrás que hacer algo un poco más desordenado:
commerce && commerce.field1 && commerce.field1.length ? commerce.field1[0].value : undefinedla idea que está buscando es hacer un bucle en el primer objeto y asignar sus opciones predeterminadas dinámicamente
let options = { // BASE INFO field1: commerce.field1[0].value, field2 : commerce.field2[0].value, field3 : commerce.field3[0].value, field4 : commerce.field4[0].value, field5 : commerce.field5[0].value, } const default_options = { // BASE INFO field1: null, field2 : '', field3 : '', field4 : [], field5 : null, } for (const fieldKey in options) { if(!options[fieldKey]) options[fieldKey] = default_options[fieldKey] // dynamically change it }