javascript - 在 Javascript 中解构对象

标签 javascript node.js

在我的代码库中我有一个对象:

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 完成的。还有更多的提取正在进行,但它们非常相同。将其与 Lodash 一起使用的几个示例:

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

它的工作和行为符合预期。我想通过消除 Lodash 并开始使用解构来改进这段代码。

到目前为止我有这个:

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. 这是提取这些值的正确做法吗?

  2. 就速度和代码可读性而言,这样做是否值得?

  3. 第二个解构示例。我将收到一个变更集数组,它有很多对象(未知数量),但我总是对第一个感兴趣。 lodash 示例说明了这一点。当我解构时,我没有指定我需要第一个(从零开始)它默认出现。我需要以某种方式指定我需要第零个,还是默认行为?

最佳答案

  1. 是的,但目前您的变体不相等。您需要将 null 指定为 destructuring 变体中的默认值。
  2. 代码并不快。至于可读性 - 这取决于。
  3. 您当前根据项目在列表中的位置明确指定索引。例如

    const {changesets: [,,{update}]} = myObject;
    

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

PS retryCount:retryCount 最好不要指定相同的名称两次。看起来很困惑。读者(比如我)会重读数遍,试图找出差异。

关于javascript - 在 Javascript 中解构对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52607177/

相关文章:

javascript - 如何将网页存储到localStorage中以便随时查看

javascript - VueJS : How to use routing in an Multi Page App to send url query params?

node.js - 通过 package.json 安装 "global"npm 依赖项

javascript - 使用 gulp 展平父目录但不展平子目录

javascript - Cloud Functions for Firebase 上的 Passport.js 给出错误 "Cannot read property ' apply' of undefined"

javascript - Node.js 中的函数构造函数是什么?

javascript - 如何使用 jquery 显示和隐藏 html 页面的不同 <section>?

javascript - 当我在数组上使用 forEach 时,如何从数组中删除项目?

javascript - db.collection(...).set 不是函数

mysql - 获取列数据并插入到另一列中给出的 id 的行中 - sql nodejs