我想创建一个新变量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
}
我在做什么对吗?能行吗?
答案 0 :(得分:-1)
您正在做的事很亲密,但需要记住的是,当您使用这样的吊具时,最终的结果是:
{
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