Как изменять свойство одного объекта при изменении другого?
Есть объект chanels у которого есть свойство memoryPercent который означает занимаемый range в %.
{
chanelId: 1,
rangeIn: 1,
rangeOut: 100,
memoryPercent: 50,
},
{
chanelId: 2,
rangeIn: 101,
rangeOut: 200
memoryPercent: 50
}
Изменяю range у одного объекта, например с chanelId = 2:
const minRange = 1
const newRangeOut = 400
const changeRange = chanels[1].rangeOut = newRangeOut
const differenceRange = chanels[1].rangeOut - chanels[1].rangeIn
const changeMemory = chanels[1].memoryPercent = differenceRange * 100 / newRangeOut // memoryPercent = 74.75%
В итоге memoryPercent изменяется только у chanels[1] (как и должно).
Вопрос в том, как автоматически рассчитывать процент у остальных элементов объекта при изменении одного из них?
Ответы (1 шт):
Ну, для начала следует определить, как именно должны измениться остальные элементы. Пересчитаться пропорционально тому, что было? Пересчитаться только соседние? Или еще как?
Например, у вас было:
chanelId1.memoryPercent = 10;
chanelId2.memoryPercent = 40;
chanelId3.memoryPercent = 30;
chanelId4.memoryPercent = 20;
Вы присвоили: chanelId2.memoryPercent = 70
Тогда остальные как должны быть? Если пропорционально, то они станут такими:
chanelId1.memoryPercent = 5;
chanelId3.memoryPercent = 15;
chanelId4.memoryPercent = 10;
Если затронет только соседние, то такими:
chanelId1.memoryPercent = 2.5;
chanelId3.memoryPercent = 7.5;
chanelId4.memoryPercent = 20;
А дальше... дальше при изменении берете и в цикле пересчитываете для каждого затронутого.