Это смущает меня без конца. Я пытаюсь динамически обновлять свойство объектов на основе переменных, предоставленных другой функцией, однако, когда я обновляю свойство, оно обновляет все те же вложенные свойства родительского объекта.
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. В чем дело? Я не могу понять, почему это происходит. Любая помощь будет отличной!