Обновление свойства объекта обновляет все остальные свойства этого объекта. - PullRequest
0 голосов
/ 02 апреля 2020

Это смущает меня без конца. Я пытаюсь динамически обновлять свойство объектов на основе переменных, предоставленных другой функцией, однако, когда я обновляю свойство, оно обновляет все те же вложенные свойства родительского объекта.

export type TopContributing = {
  totalInTopFive: number
  one: BreakdownForName
  two: BreakdownForName
  three: BreakdownForName
  four: BreakdownForName
  five: BreakdownForName
  others: BreakdownForName
}

export type BreakdownForName = {
  name: string
  itemBreakdown: {
    cancelled: MetricValue
    outstanding: MetricValue
    reclassifiedAsIssue: MetricValue
    reclassifiedAsValid: MetricValue
  }
}

type MetricValue = { 
    items: object[]; 
    count: number 
}

const populateTopOutcomes = (
  item: object, //the object to push to topItems
  outcome: string, //the itemBreakdown property e.g. outstanding, reclassifiedAsValid, etc.
  topItems: TopContributing, // the parent Object that contains Top5Items, others and totalCount.
  topFive: string[] // list of names of top items
) => {
  const itemIndex = topFive.indexOf(item.name) // find index of which bucket in topItems the item's in
  if (itemIndex === 0) {
    topItems.one.itemBreakdown[outcome].items.push(item)
    topItems.one.itemBreakdown[outcome].count++
  }
  else if (itemIndex === 1)  {
    topItems.two.itemBreakdown[outcome].items.push(item)
    topItems.two.itemBreakdown[outcome].count ++
  }
  else if (itemIndex  === 2)  {
    topItems.three.itemBreakdown[outcome].items.push(item)
    topItems.three.itemBreakdown[outcome].count ++
  }
  else if (itemIndex  === 3)  {
    topItems.four.itemBreakdown[outcome].items.push(item)
    topItems.four.itemBreakdown[outcome].count ++
  }
  else if (itemIndex  === 4)  {
    topItems.five.itemBreakdown[outcome].items.push(item)
    topItems.five.itemBreakdown[outcome].count ++
  }
  else if (itemIndex  < 0)  {
    topItems.others.itemBreakdown[outcome].items.push(item)
    topItems.others.itemBreakdown[outcome].count ++
  }
}

Проблема, с которой я сталкиваюсь, заключается в том, что я получаю доступ к объекту MetricValue в topItems. {Свойство} .itemBreakdown [результат], используя результат, оно обновляет это свойство (элементы или количество) во всех объектах в объект TopContributing. Например, если я попытаюсь обновить результат «выдающийся» в topItems.one, он добавит это же значение в topItems.two, three, et c. В чем дело? Я не могу понять, почему это происходит. Любая помощь будет отличной!

...