1

毎日異なる時間を含むjsonデータがあります。日ごとの時間の合計を計算する必要があります。ここに私のJSONがあります

   [
    {
        "id":"1",
        "monday_NT":"3:45",
        "monday_TH":"2:45",
        "monday_DT":"4:45",
        "monday_DTH":"2:45",
    },
    {
        "id":"2",
        "monday_NT":"2:45",
        "monday_TH":"5:45",
        "monday_DT":"3:45",
        "monday_DTH":"1:49",
    }
]

この計算を実行しましたが、この計算に使用した変数が多すぎます。月曜日のコードは次のとおりです。

var monday_NT_hr=0;
var monday_TH_hr=0;
var monday_DT_hr=0;
var monday_DTH_hr=0;
var monday_NT_min=0;
var monday_TH_min=0;
var monday_DT_min=0;
var monday_DTH_min=0;
for(var i=0;i<data.length;i++)
{
    for(var index in data[i])
    {
        if(index=="monday_NT")
        {
            monday_NT_hr +=data[i][index].split(":")[0]; 
            monday_NT_min +=data[i][index].split(":")[1];
        }
        if(index=="monday_TH")
        {
            monday_TH_hr +=data[i][index].split(":")[0];
            monday_TH_min +=data[i][index].split(":")[1];
        }
        if(index=="monday_DT")
        {
            monday_DT_hr +=data[i][index].split(":")[0];
            monday_DT_min +=data[i][index].split(":")[1];
        }
        if(index=="monday_DTH")
        {
            monday_DTH_hr +=data[i][index].split(":")[0];
            monday_DTH_min +=data[i][index].split(":")[1];
        }
    }
}

とにかく、この計算に使用される変数が少ないのでしょうか? 助けてください。

4

4 に答える 4

1

リストされた各値が時間と分単位の時間であると想定でき、すべての時間の合計を求めたい場合は、コードを統合する可能性があります。

var total_time = 0;

for (var i = 0; i < data.length; i++) {
  for (var attr in data[i]) {
    if (attr != 'id') {
      total_time += getSeconds(data[i][attr]);
    }
  }
}

total_time = secToFormatted(total_time); // Total time in a formatted string

function getSeconds(strTime) {
  // Convert a string time to seconds
}

function secToFormatted(seconds) {
  // Convert seconds into hours and minutes string
}
于 2013-03-10T07:13:47.357 に答える
0

hoursとという名前の 2 つのオブジェクトを設定しminutes、元のデータの正確なキー名に基づいて合計を追加するだけです。

var hours = {},
    minutes = {};

for (var i = 0, il = data.length; i < il; i++) {
    for (var k in data[i]) {
        var timeSplit = data[i][k].split(':'),
            hour = parseInt(timeSplit[0], 10),
            min = parseInt(timeSplit[1], 10);

        hours[k] = hours[k] ? hours[k] + hour : hour;
        minutes[k] = minutes[k] ? minutes[k] + min : min;
    }
}

console.log(hours);
// {id: 3, monday_NT: 5, monday_TH: 7, monday_DT: 7, monday_DTH: 3}
console.log(minutes);
// {id: NaN, monday_NT: 90, monday_TH: 90, monday_DT: 90, monday_DTH: 94}

は無視できますid

デモを見る

于 2013-03-10T07:16:31.883 に答える
0

これはもっと良いはずです:(フィドル

var monday_NT= {min:0, hr:0};
var monday_TH={min:0, hr:0};
var monday_DT={min:0, hr:0};
var monday_DTH={min:0, hr:0};

function splitSum(obj, data) {  
    data = data.split(":");
    obj.hr += Number(data[0]);
    obj.min += Number(data[1]); 
}

for(var i in arr) {    
    splitSum(monday_NT, arr[i].monday_NT);
    splitSum(monday_TH, arr[i].monday_TH);
    splitSum(monday_DT, arr[i].monday_DT);
    splitSum(monday_DTH, arr[i].monday_DTH);
}

あなたの例によると

monday_NT.min

と同等です

monday_NT_min

私は、このすべてのハードワークが追加の利益をもたらさないと信じています。

于 2013-03-10T07:16:51.580 に答える