Как я могу присвоить вложенные данные новой переменной? - PullRequest
0 голосов
/ 02 мая 2019

Я хочу создать новую переменную 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 голосов
/ 02 мая 2019

То, что вы делаете, близко, но вы должны помнить, что когда вы используете такой разбрасыватель, вы получите следующее:

{
  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
  }
}

Таким образом, вы также не заканчиваете тем, что создаете новую переменную в памяти только для того, чтобы немного ее изменить, а затем вернуть.Все происходит сразу, и ТОЛЬКО если у вас есть значение arg 'product', отличное от undefined или null

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...