在我的代码库中,我有一个对象:
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并开始使用Destructuring来改进此代码。
到目前为止,我有这个:
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;
它也可以工作,测试通过了:
现在我有几个问题:
这是提取这些值的正确做法吗?
就速度和代码可读性而言,这值得吗?
第二个销毁示例。我将收到一个changeset数组,其中包含许多对象(未知数量),但是我始终对第一个对象感兴趣。 lodash的例子说明了这一点。分解时,我不指定默认情况下需要第一个(从零开始)。我需要某种方式指定我需要第零个,还是默认行为?
答案 0 :(得分:1)
null
指定为具有解构功能的变量的默认值。您当前正在通过列表中项目的位置显式指定索引。例如
const {changesets: [,,{update}]} = myObject;
将显式提取第3个元素。您无需执行任何其他操作。
PS retryCount:retryCount
最好不要两次指定相同的名称。看起来很混乱。读者(像我一样)将重读几次,以找出差异。