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/

ここで、aggregates オブジェクトは、ID をキーとし、カウントとマイルを値として保持するオブジェクトのハッシュテーブルとして機能します。

于 2013-03-18T21:06:29.287 に答える
1

いくつかの問題がありますが、最大の問題は、情報を収集するための1つのループと、それを表示するための2番目のループが必要なことです。私はそれを試さずにこれが完全に正しいとは思わない。

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 に答える