У меня есть запрос caml, который возвратит что-то вроде этого в xml.
ID Title Percentage
7;#7 2 1.00000000000000
7;#7 3 0.220000000000000
7;#7 sub 1.1 0
7;#7 4 0.140000000000000
12;#12 7 0.670000000000000
13;#13 6 0.700000000000000
Я, скорее всего, создаю объект объектов для каждого элемента. Что-то вроде этого:
var result = [{id:7,title:"2",percent:1.0},...,{id:13,title:"6",percent:0.7}]
Как я мог перебирать result
и складывать все проценты с одинаковым идентификатором, поэтому я получаю что-то вроде:
var total = [{id:7,percent:1.36,count:4},{id:12,percent:0.67,count:1},{id:13,percent:0.7,count:1}]
Или даже если бы я мог просто получить percent/count = totalPercentage
поэтому я получаю объект с помощью всего лишь {id:7,totalPercentage:0.325}
Попробуй это:
var percentages = {};
result.forEach(function (it) {
var obj = percentages[it.id] = percentages[it.id] || {
percent: 0,
count: 0,
id: it.id
};
obj.percent += Number(it.percent); // Casting to Number, in case percent comes as string
obj.count++;
});
Это создает объект с идентификаторами в качестве ключей. Если вы хотите преобразовать его в массив:
total = Object.keys(percentages).map(function (it) {
return percentages[it]
});
Чтобы получить среднее значение процентов, вы можете сделать следующее:
total = total.map(function(it) {
return {
id: it.id,
percent: it.percent / it.count
};
});
Просто создайте новый объект и итерации, если старый. Вы можете увидеть демо: http://jsfiddle.net/TSyE5/2/
var totalPercent = [],
total = {},
result = [{id:8,title:"3",percent:1.0},{id:7,title:"2",percent:1.0},{id:7,title:"2",percent:3.0},{id:13,title:"6",percent:0.7},{id:13,title:"6",percent:0.7},{id:13,title:"6",percent:0.7}];
$.each(result, function(){
!(this.id in total) && (total[this.id] = {id:this.id, title:this.title, percent:0, count:0});
total[this.id].percent += this.percent;
total[this.id].count++;
});
$.each(total, function(i){
total[i].percent = total[i].percent/total[i].count;
totalPercent.push({id:total[i].id, percent:total[i].percent});
});
NaN
. Есть ли вероятность, что некоторыеpercent
поля отсутствуют?