我目前正在处理一个字符串的有效负载,即时解析正在使用JSON.parse(payload)
。我的问题是,一旦我转换了有效负载,我需要访问新创建的JSON对象中的至少5个属性,并且它是完全嵌套的。我目前的实施是:
....then(payload => {
return ({
obj1: JSON.parse(payload).field.obj1
obj2: JSON.parse(payload).field.obj2
obj3: JSON.parse(payload).field.obj3
obj4: JSON.parse(payload).field.obj4
obj5: JSON.parse(payload).field.obj5
});
})
我觉得这是多次重复,并且觉得这种方式在可读性方面会更好(即使那样不是那么干净):
....then(payload => {
let jsonObj = JSON.parse(payload)
return ({
obj1: jsonObj.field.obj1
obj2: jsonObj.field.obj2
obj3: jsonObj.field.obj3
obj4: jsonObj.field.obj4
obj5: jsonObj.field.obj5
});
})
有人可以建议在可读性和性能方面执行此操作的最佳方法吗?
注意:这是在promise.all()
内使用的,所以上面将迭代X承诺。
答案 0 :(得分:0)
您可以使用destructuring assignment并使用short hand properties返回一个对象。
let { field: { obj1, obj2, obj3, obj4, obj5 } } = JSON.parse(payload);
return { obj1, obj2, obj3, obj4, obj5 };
答案 1 :(得分:0)
修改强>
更好的是,只需解析整个事物并返回字段对象。我认为那会有用。 (虽然我有点睡不着觉!)
bindService()
结束修改
....then(payload => {
return (JSON.parse(payload).field);
})
obj。field
obj进行字符串化以准备将其复制。field
obj。-
field
答案 2 :(得分:0)
如果你使用Bluebird
,你也可以这样做(因为你已经使用Promise.all
)
const payloadPromises = Promise.map(sourcePromises, JSON.parse);
return Promise
.all(payloadPromises)
.then(payloads => payload.map(payload => ({
obj1: payload.field.obj1,
obj2: payload.field.obj2,
}));
但实际上只是变量(你的第二种方法)完全没问题。也许,在这种情况下,您应该只使用const
而不是let
。