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

您可以只设置两个名为hoursand的对象,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 回答
0

如果要计算 24 小时甲酸的两倍时间差

var time1 = "22:00"
var time2 = "01:00"

答:3:00 小时

var c = a.split(":")
var d = b.split(":")
var aH = parseInt(c[0])
var aM = parseInt(c[1])
var bH = parseInt(d[0])
var bM = parseInt(d[1])


if(aM > bH) {
 bH -= 1
 bM += 60
}
if(aH > bH) {
    bH += 24
}
var hour = bH - aH
var min = bM - aM
console.log( hour + ":" + min)

看演示

于 2017-12-05T06:50:39.053 回答