В этот вопрос я столкнулся с следующей упрощенной проблемой:
Начнем с массива объектов с атрибутом value. Мы хотим рассчитать для каждого значения, какой процент от суммы значений он есть, и добавить его в структуру как свойство. Для этого нам нужно знать сумму значений, но эта сумма не рассчитывается заранее.
//Original data structure
[
{ "value" : 123456 },
{ "value" : 12146 }
]
//Becomes
[
{
"value" : 123456,
"perc" : 0.9104
},
{
"value" : 12146 ,
"perc" : 0.0896
}
]
Легкое и, вероятно, наиболее читаемое решение состоит в том, чтобы дважды пройти через структуру данных. Сначала мы вычисляем сумму, затем вычисляем процент и добавляем его в структуру данных.
var i;
var sum = 0;
for( i = 0; i < data.length; i++ ) {
sum += data[i].value;
}
for( i = 0; i < data.length; i++ ) {
data[i].perc = data[i].value / sum;
}
Можем ли мы вместо этого просто пройти через структуру данных один раз и как-то сказать, что процентное выражение должно оцениваться только после того, как будет известна вся сумма?
В первую очередь меня интересуют ответы, которые касаются чистого javascript. То есть: без каких-либо библиотек.