如果值未定义,则为对象分配默认值

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
}