Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果其他参数匹配,则对数组中的参数求和_Javascript_Jquery_Arrays - Fatal编程技术网

Javascript 如果其他参数匹配,则对数组中的参数求和

Javascript 如果其他参数匹配,则对数组中的参数求和,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个数组如下 如果资源id和startdate与其他条目匹配,我想汇总TotalHrs参数 var arr = [ {"Id":123, "Subevents":[ {"Id":225,"ParentId":123,"ResourceId":"abc","Name":"4.00","TotalHrs":"4.00","StartDate":"2015-08-13 00:00","EndDate":"2015-08-13 23:59"},

我有一个数组如下

如果资源id和startdate与其他条目匹配,我想汇总TotalHrs参数

var arr = [
    {"Id":123,
        "Subevents":[
            {"Id":225,"ParentId":123,"ResourceId":"abc","Name":"4.00","TotalHrs":"4.00","StartDate":"2015-08-13 00:00","EndDate":"2015-08-13 23:59"},
            {"Id":226,"ParentId":123,"ResourceId":"abc","Name":"4.00","TotalHrs":"4.00","StartDate":"2015-08-13 00:00","EndDate":"2015-08-13 23:59"},
            {"Id":227,"ParentId":123,"ResourceId":"xyz","Name":"8.00","TotalHrs":"8.00","StartDate":"2015-08-14 00:00","EndDate":"2015-08-14 23:59"},
            {"Id":228,"ParentId":123,"ResourceId":"xyz","Name":"8.00","TotalHrs":"8.00","StartDate":"2015-08-14 00:00","EndDate":"2015-08-14 23:59"}
        ]
    },
    {"Id":335,
        "Subevents":[
            {"Id":345,"ParentId":335,"ResourceId":"abc","Name":"2.00","TotalHrs":"2.00","StartDate":"2015-08-13 00:00","EndDate":"2015-08-13 23:59"},
            {"Id":346,"ParentId":335,"ResourceId":"pqr","Name":"6.00","TotalHrs":"6.00","StartDate":"2015-08-14 00:00","EndDate":"2015-08-14 23:59"}
        ]}];
在上例中,起始日期为“2015-08-13 00:00”的ResourceId“abc”有3个条目,总小时值为4,4,2,总计为10

我想将这3个条目的TotalHrs值更新为10

同样,ResourceId=“xyz”和StartDate=“2015-08-14 00:00”有两个这样的条目,其TotalHrs值等于8,8,即等于16

因此,如果任何其他条目与StartDate和ResourceId匹配,则生成的数组应该只更新TotalHrs值

因此,我的最终数组应该如下所示

[
    {"Id":123,
        "Subevents":[
            {"Id":225,"ParentId":123,"ResourceId":"abc","Name":"4.00","TotalHrs":"10","StartDate":"2015-08-13 00:00","EndDate":"2015-08-13 23:59"},
            {"Id":226,"ParentId":123,"ResourceId":"abc","Name":"4.00","TotalHrs":"10","StartDate":"2015-08-13 00:00","EndDate":"2015-08-13 23:59"},
            {"Id":227,"ParentId":123,"ResourceId":"xyz","Name":"8.00","TotalHrs":"16","StartDate":"2015-08-14 00:00","EndDate":"2015-08-14 23:59"},
            {"Id":228,"ParentId":123,"ResourceId":"xyz","Name":"8.00","TotalHrs":"16","StartDate":"2015-08-14 00:00","EndDate":"2015-08-14 23:59"}
        ]
    },
    {"Id":335,
        "Subevents":[
            {"Id":345,"ParentId":335,"ResourceId":"abc","Name":"2.00","TotalHrs":"10","StartDate":"2015-08-13 00:00","EndDate":"2015-08-13 23:59"},
            {"Id":346,"ParentId":335,"ResourceId":"pqr","Name":"6.00","TotalHrs":"6.00","StartDate":"2015-08-14 00:00","EndDate":"2015-08-14 23:59"}
        ]}]

用太多的循环。首先创建一个“ResourceId”=>“totalHrs”的对象,然后在数组中进行第二次时间循环,并根据计算出的值分配totalHrs

var totals = {};
arr.forEach(function (element) {
    if (element["Subevents"]) {
        var arr2 = element["Subevents"];
        arr2.forEach(function (element) {
            totals[element["ResourceId"] + element["StartDate"]] = totals[element["ResourceId"] + element["StartDate"]] || 0;
            totals[element["ResourceId"] + element["StartDate"]] += parseInt(element["TotalHrs"]);
        })
    }
});

arr.forEach(function (element) {
    if (element["Subevents"]) {
        var arr2 = element["Subevents"];
        arr2.forEach(function (element) {
            element["TotalHrs"] = totals[element["ResourceId"] + element["StartDate"]];
        })
    }
})

此解决方案使用一个临时对象来计算分组项的总和:

var arr=[{“Id”:123,“Subevents”:[{“Id”:225,“ParentId”:123,“ResourceId”:“abc”,“Name”:“4.00”,“TotalHrs”:“4.00”,“StartDate”:“2015-08-13 00:00”,“EndDate”:“2015-08-13 23:59”},{“Id”:226,“ParentId”:123,“ResourceId”:“abc”,“Name”:“4.00”,“TotalHrs”:“4.00”,“StartDate”:“2015-08-13 00:00”,“EndDate”:“2015-08-13 23:59”},{“Id”:227,“ParentId”:123,“ResourceId”:“xyz”,“Name”:“8.00”,“TotalHrs”:“8.00”,“StartDate”:“2015-08-14 00:00”,“EndDate”:“2015-08-14 23:59”},{“Id”:228,“ParentId”:123,“ResourceId”:“xyz”,“Name”:“8.00”,“TotalHrs”:“8.00”,“StartDate”:“2015-08-14 00:00”,“EndDate”:“2015-08-14 23:59”},{“Id”:335,“子事件”{“Id”::345,“家长Id”:335,“资源Id”:“abc”,“姓名”:“2.00”,“总小时数”:“2.00”,“开始日期”:“2015-08-13 00:00”,“结束日期”:“2015-08-13 23:59”},{“Id”:346,“家长Id”:335,“资源Id”:“pqr”,“姓名”:“6.00”,“总小时数”:“6.00”,“开始日期”:“2015-08-14 00:00”,“结束日期”:“2015-08-14 23:59”},
温度={};
arr.forEach(功能(a){
a、 子事件。forEach(函数(b){
temp[b.ResourceId]=temp[b.ResourceId]| |{};
temp[b.ResourceId][b.StartDate]=(temp[b.ResourceId][b.StartDate]| 0)++b.TotalHrs;
});
});
arr.forEach(功能(a){
a、 子事件。forEach(函数(b){
b、 TotalHrs=温度[b.ResourceId][b.StartDate];
});
});
document.write('temp:'+JSON.stringify(temp,0,4)+'');

document.write('arr:'+JSON.stringify(arr,0,4)+'')谢谢,但是代码中没有提到起始日期,因为如果我更改ID为345的记录的起始日期,它将不会给出正确的结果。请注明我的答案,以包括
起始日期