【问题标题】:Destructuring multilevel and and assigning default value to a first level object解构多级并将默认值分配给第一级对象
【发布时间】:2021-11-11 03:34:47
【问题描述】:

我正在尝试解构来自 API 的响应。响应如下所示。 程序中只会使用ab

response = {
   data: {
       someData: {
    a:1,
    b:2
    }

   }
}

解构 const {data: { someData: { a,b } } } = response

现在,如果响应中不存在数据,则应用程序可能会中断。我想将默认值设置为datasomeData。有没有办法设置默认值?

尝试过:但将 lint 错误作为意外标记抛出

const {data= {}: { someData = {}: { a,b } } } = response

【问题讨论】:

    标签: javascript ecmascript-6 destructuring


    【解决方案1】:

    您需要提供如下所示的默认值:

    const {data: { someData: { a, b } = {} } = {} } = response;
    

    MDN 文档上的This example 表明默认值应该在末尾,而不是紧跟在属性名称之后。

    如果解压后的属性为undefined,则默认值将用作嵌套解构的目标。

    示例:

    const response = {
      data: {}
    };
    
    const {data: { someData: { a, b } = {} } = {} } = response;
    
    console.log(a, b);

    另一种选择是使用可选链接,在我看来,这是一种更好的代码可读性方法:

    response?.data?.someData?.a
    

    【讨论】:

      【解决方案2】:

      默认值放在最后,而不是紧跟在变量之后。

      并且它需要有 someData: 嵌套对象来提供默认值。

      const response = {};
      
      const {data: {someData: { a,b } } = {someData: {a:0, b:0}} } = response;
      
      console.log(a, b);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-11
        • 2020-09-30
        • 2018-05-26
        • 2020-10-13
        • 1970-01-01
        • 2021-12-18
        相关资源
        最近更新 更多