如果值未定义,则为对象分配默认值
Assign default value to object if value is undefined
我正在从 API 中获取数据,某些字段不是必需的,因此在响应对象中未定义
如果在响应中未定义所述字段,我想为我的对象参数分配一个默认的空值,如 null
''
[]
,到目前为止,这是我所拥有的(我还有更多的字段要获取,但在这个例子中停在了 5 个)
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)
}));
});
如果某个字段没有值,例如 commerce.field2[0] is undefined
,我会收到错误消息,因为 API 响应不包含它,我正在寻找的是一种有效的方法来做某事喜欢
field2 : if(commerce.field2[0].value) { commerce.field2[0].value } else {''}
因为我有很多字段我真的不想在我的代码中有很多 if
我能找到的唯一可以帮助我的是 Object.assign()但没什么用
您可以使用条件(三元)运算符。
语法:condition ? exprIfTrue : exprIfFalse
let options = {
field1: commerce.field1[0].value ? commerce.field1[0].value : '',
...
}
查看使用 @babel/plugin-proposal-optional-chaining
这将允许您执行以下操作:
const field1 = commerce?.field1[0]?.value
您还可以查看 _.get
:
const field1 = _.get(commerce, 'field[0].value', null)
否则,您将不得不做一些更混乱的事情:
commerce && commerce.field1 && commerce.field1.length
? commerce.field1[0].value
: undefined
您的想法是循环第一个对象并动态分配您的默认选项
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
}
我正在从 API 中获取数据,某些字段不是必需的,因此在响应对象中未定义
如果在响应中未定义所述字段,我想为我的对象参数分配一个默认的空值,如 null
''
[]
,到目前为止,这是我所拥有的(我还有更多的字段要获取,但在这个例子中停在了 5 个)
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)
}));
});
如果某个字段没有值,例如 commerce.field2[0] is undefined
,我会收到错误消息,因为 API 响应不包含它,我正在寻找的是一种有效的方法来做某事喜欢
field2 : if(commerce.field2[0].value) { commerce.field2[0].value } else {''}
因为我有很多字段我真的不想在我的代码中有很多 if
我能找到的唯一可以帮助我的是 Object.assign()但没什么用
您可以使用条件(三元)运算符。
语法:condition ? exprIfTrue : exprIfFalse
let options = {
field1: commerce.field1[0].value ? commerce.field1[0].value : '',
...
}
查看使用 @babel/plugin-proposal-optional-chaining
这将允许您执行以下操作:
const field1 = commerce?.field1[0]?.value
您还可以查看 _.get
:
const field1 = _.get(commerce, 'field[0].value', null)
否则,您将不得不做一些更混乱的事情:
commerce && commerce.field1 && commerce.field1.length
? commerce.field1[0].value
: undefined
您的想法是循环第一个对象并动态分配您的默认选项
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
}