代码之家  ›  专栏  ›  技术社区  ›  Amiga500

在Javascript中分解对象

  •  1
  • Amiga500  · 技术社区  · 6 年前

    let myObject = {
      "version": 1,
      "traceId": "123456789",
      "session": {},
      "trigger": {
        "service": "some_service_is_here",
        "action": "update",
        "resource": "transaction"
      },
      "changesets": [
        {
          "update": {
            "retryCount": 1
          },
          "conditions": {
            "equal": {
              "subscriptionId": "aaaaaaaaaaaa",
              "transactionId": "bbbbbbbbbbbb"
            }
          }
        },
        {
          "update": {
            "retryCount": 2
          },
          "conditions": {
            "equal": {
              "subscriptionId": "ccccccccccccc",
              "transactionId": "dddddddddddddd"
            }
          }
        }
      ]
    }
    

    我需要从那个对象中提取一些属性。到目前为止,它是用洛达斯。有更多的提取正在进行,但他们是相当相同的。与Lodash一起使用的几个示例:

    const trigger = _.get(myObject, 'trigger', null);
    const retryCount = _.get(myObject, 'changesets[0].update.retryCount', null);
    

    到目前为止,我有:

    const trigger = _.get(myObject, 'trigger', null);
    
    becomes
    
    const {trigger} = myObject;
    

    const retryCount = _.get(myObject, 'changesets[0].update.retryCount', null);
    

    变成

    const {changesets: [{update:{retryCount:retryCount = null}}]} = myObject;
    

    现在我有几个问题:

    1. 这是提取这些值的正确做法吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   skyboyer    6 年前
    1. 是的,但目前你们的变种并不相同。您需要指定 null 作为变量中的默认值。
    2. 代码不是更快。至于可读性-这取决于。
    3. const {changesets: [,,{update}]} = myObject;
      

      将显式提取第三个元素。你不需要做任何额外的事情。

    retryCount:retryCount 最好不要指定同一个名称两次。看起来很混乱。读者(像我一样)会再读几遍,试图找出其中的区别。