我正在從 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() 但它沒有多大幫助
uj5u.com熱心網友回復:
您可以使用條件(三元)運算子。
句法: condition ? exprIfTrue : exprIfFalse
let options = {
field1: commerce.field1[0].value ? commerce.field1[0].value : '',
...
}
uj5u.com熱心網友回復:
看看使用@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
uj5u.com熱心網友回復:
你的想法是回圈第一個物件并動態分配你的默認選項
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
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/391708.html
標籤:javascript 哎呀
