0

我有这样的数据:

A,10,USA
B,20,UK
A,5,USA

并且输出必须是这样的:

A has ran 15 miles with average of 7.5
B has ran 20 miles with average of 20

在 jQuery 中,我编写了这样的代码:

$(document).ready(function(){
               $('#calculate').click(function(){
                $('#report').empty();
                var data = $('#input').val();



                 $.each($.csv.toArrays(data), function(_, row) {

                     var namecount = 0
                     $(row[0]).each(function(){
                        namecount++; 
                     });

                     var totalevents = 0;
                     $(row[1]).each(function(){
                        totalmiles++; 
                     });

                     var average = totalmiles / namecount;

                     $('#report').append('<div>' + row[0] + ' has ran ' + totalmiles +"  "+'miles with an average of'+"  "+average +'</div>');
                 });
               });
            });

但代码将总里程数和平均值计为 0 和 NaN。我曾尝试在 jQuery 中使用 Hashtable 来解决这个问题,但我还没有找到一个很好的指南来告诉我如何通过 javascript 或 jQuery 来实现这些计算。

4

2 回答 2

3

试试这是你的主要代码:

var aggregates = {};

$.each($.csv.toArrays(data), function(_, row) {
    var id = row[0];
    var miles = row[1];
    if (aggregates[id] === undefined) {
        aggregates[id] = {
            count : 0,
            miles : 0
        };
    }
    aggregates[id].miles += parseInt(miles);
    aggregates[id].count++;
});

for (id in aggregates) {
    $("#report").append(id + " ran " + aggregates[id].miles + " miles with average of " + (aggregates[id].miles / aggregates[id].count));
}

这是它的小提琴:http: //jsfiddle.net/7Ev7V/

在这里,聚合对象用作哈希表,以 id 作为键,对象以计数和英里作为值。

于 2013-03-18T21:06:29.287 回答
1

有几个问题,但最大的问题是您需要一个循环来收集信息,并需要第二个循环来显示它。如果不尝试,我怀疑这是完全正确的。

var totals = {};

$.each($.csv.toArrays(data), function(_, row) {

   var prev = totals[row[0]];
   if (!prev) {
      prev = {};
      prev.miles = 0;
      prev.count = 0;
      totals[row[0]] = prev;
   }

   prev.miles += row[1];
   prev.count++;
});

for (key in totals) {
   value = totals[key];
   $('#report').append('<div>' + key + ' has run ' + value.miles +"  miles with an average of  "+(value.miles / value.count)+'</div>');
}
于 2013-03-18T20:45:09.440 回答