0

私はこのようなjsonを持っています。そのjsonにはオブジェクト名があり、同じtipe で、、、、、、、、を合計したいと思います(たとえば、「ESL」の場合は合計tipeします)。それをjavascriptで合計する方法は?ループでできますか?act_qty1act_val1acvqtyacvvalbudqtybudvalcm_val1cm_val2cm_val3tipe

これが私がこれまでに作ったものです:

function detail(kodenegara, koderesult)
        {   
            $.mobile.showPageLoadingMsg(); 
            $.ajax({
                type: "GET",
                contentType: "application/json; charset=utf-8",
                url: "http://www.greenfields.co.id:502/Service1.svc/"+kodenegara,
                dataType: "json",
                success:function(data){
                    var result = koderesult;

                    var details = "";

                    for (i = 0; i < data[result].length; i++){
                        $("#"+data[result][i].tipe).empty();
                    }
                    for (i = 0, types={} ; i < data[result].length; i++){
                        $("#"+data[result][i].tipe).append("<tr>"+
                            "<td>"+data[result][i].mc+"</td>"+
                            "<td>"+data[result][i].value3+"</td>"+
                            "<td>"+data[result][i].value2+"</td>"+
                            "<td>"+data[result][i].value1+"</td>"+
                            "<td>"+data[result][i].avgqty+"</td>"+
                            "<td>"+data[result][i].budqty+"</td>"+
                            "<td>"+data[result][i].budval+"</td>"+
                            "<td>"+data[result][i].acvqty+"</td>"+
                            "<td>"+data[result][i].acvval+"</td>"+
                          "</tr>").trigger('create');


                            //----------------------------------//
                            // HERE IS what I've made TO SUM THE VALUES //
                            //vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv//

                           for(i = 0; i < data[result].length; i++) {
                    if(data[result][i].tipe == 'ESL') 
                    {
                        //how to summing data[result][i].cm_val3 where data[result][i].tipe == 'ESL'
                                        var b = i + 1;
                            var test = parseInt(data[result][i].cm_val3) + parseInt(data[result][b].cm_val3)
                    }
                }

                    }

                    //show the page
                    $.mobile.changePage("#detail_"+kodenegara, "slide", false, true);
                },
                error: function () { 
                    alert("ERROR"); 
                }
            });
        }

tipe「ESL」(または「ESL1L」または「WHP」など)のときに値を合計するための正しいループを作成する方法がわかりません。これを使用する場合:

var b = i + 1;
var test = parseInt(data[result][i].cm_val3) + parseInt(data[result][b].cm_val3)

最後の配列のみを合計します。その条件と合計するための正しいループを書く方法は?

4

2 に答える 2

1

それはトリックを行う必要があります:

var sum_cm_val3=0;

for (var i=0;i<data[result].length;i++) {
    if (data[result][i].tipe == "ESL") {
        var cm_val3 = data[result][i].cm_val3;
        if (parseInt(cm_val3)==cm_val3) {
            sum_cm_val3 += parseInt(cm_val3);
        }
    }
}
于 2012-07-13T09:28:23.283 に答える
1

ここに実用的なフィドルが来ます http://jsfiddle.net/xKJn8/1/

var SumByTipe = {};
for(i in data.GetReportIdResult){
    var currtipe = data.GetReportIdResult[i].tipe;
    if (currtipe){
        if (currtipe in SumByTipe){
            for (j in data.GetReportIdResult[i]){
                if (j != "tipe" && j != "mc"){
                    SumByTipe[currtipe][j + '_total'] += parseFloat(data.GetReportIdResult[i][j]);
                }
            }
        }else{
            var firstSum = {};
            for (j in data.GetReportIdResult[i]){
                if (j != "tipe" && j != "mc"){
                    firstSum[j + '_total'] = parseFloat(data.GetReportIdResult[i][j]);
                }
            }
            SumByTipe[currtipe]=firstSum;
        }
    }
}
console.debug(SumByTipe);
于 2012-07-13T09:08:45.470 に答える