如何将嵌套数据分配给新变量?

时间:2019-05-02 17:47:43

标签: javascript variables

我想创建一个新变量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
  }

我在做什么对吗?能行吗?

1 个答案:

答案 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
  }
}

这样,您也不会最终在内存中创建一个新变量,只是对其稍加修改然后将其返回。这一切都是一次性发生的,并且只有在您拥有undefinednull

以外的arg'product'值时才发生