我想创建一个新的变量line
,并使其包含嵌套数据。
我所期待的结果是:
{
description: "descriptionString",
vatInfo : {
vatAccount: {
vatCode : "vatCode"
}
}
}
我是如何做到的:
export function changeProductOnLine(originalLine, product, customer, invoice) {
let line = { ...originalLine, product }
if (product) {
const vatCode = getProductVatCode(line, invoice)
line.description = buildLineDescription(product.name, product.description)
line.vatInfo.vatAccount.vatCode = "v10"
return line
}
我做的是正确的吗?它能工作吗?
发布于 2019-05-02 18:03:46
你所做的是很接近的,但你需要记住,当你使用像这样的扩散器时,你最终会得到这样的结果:
{
description: "descriptionString",
vatInfo : {
vatAccount: {
vatCode : "vatCode"
}
},
product: {
description: "descriptionString",
vatInfo : {
vatAccount: {
vatCode : "vatCode"
}
}
}
}
我认为你想要的是让product
重写这些值,而不是根据你解释的你想要的东西,在你的对象中最终得到一个'product‘属性。试试这个:
export function changeProductOnLine(originalLine, product, customer, invoice) {
if (product) {
return {
...originalLine,
// since these are the last thing in the new obj it will overwrite anything in the obj
description: buildLineDescription(product.name, product.description),
vatInfo: {
vatAccount : {
vatCode: getProductVatCode(line, invoice)
}
}
}
} else {
return line
}
}
这样,你也不会在内存中创建一个新的变量,只是稍微修改一下,然后再返回它。这一切都会同时发生,而且仅当您具有undefined
或null
以外的参数'product‘值时才会发生
https://stackoverflow.com/questions/55957735
复制相似问题