Javascript 聚合多个对象数组并汇总其属性

Javascript 聚合多个对象数组并汇总其属性,javascript,arrays,charts,aggregate,Javascript,Arrays,Charts,Aggregate,我正在寻找性能最好的方法来解决以下任务:给定的数组如下,其中包含每月数据。我已经预先使用了Array.filter()方法,所以这个示例已经缩短到两个月。为了可读性,我使用了JSON美化器 var dbSource = [ { "t":"2016-10-01T00:00:00", "c":968, "d":[ { "eka1":1, "anz1":22, "kos1

我正在寻找性能最好的方法来解决以下任务:给定的数组如下,其中包含每月数据。我已经预先使用了Array.filter()方法,所以这个示例已经缩短到两个月。为了可读性,我使用了JSON美化器

var dbSource = [
   {
      "t":"2016-10-01T00:00:00",
      "c":968,
      "d":[
         {
            "eka1":1,
            "anz1":22,
            "kos1":4400,
            "tag1":"1E"
         },
         {
            "eka1":1,
            "anz1":1,
            "kos1":200,
            "tag1":"1K"
         },
         {
            "eka1":1,
            "anz1":12,
            "kos1":2400,
            "tag1":"1N"
         },
         {
            "eka1":1,
            "anz1":41,
            "kos1":8200,
            "tag1":"1R"
         },
         {
            "eka2":0.6364,
            "anz2":11,
            "kos2":1600,
            "tag2":"2A"
         },
         {
            "eka2":1,
            "anz2":6,
            "kos2":1200,
            "tag2":"2D"
         },
         {
            "eka2":1,
            "anz2":2,
            "kos2":400,
            "tag2":"2E"
         },
         {
            "eka2":0.1839,
            "anz2":87,
            "kos2":6750,
            "tag2":"2F"
         },
         {
            "eka2":0.1613,
            "anz2":31,
            "kos2":2300,
            "tag2":"2G"
         },
         {
            "eka2":0.6724,
            "anz2":58,
            "kos2":8750,
            "tag2":"2K"
         },
         {
            "eka2":1,
            "anz2":1,
            "kos2":200,
            "tag2":"2L"
         },
         {
            "eka2":1,
            "anz2":3,
            "kos2":600,
            "tag2":"2Q"
         },
         {
            "eka2":1,
            "anz2":181,
            "kos2":36200,
            "tag2":"2R"
         },
         {
            "eka2":1,
            "anz2":1,
            "kos2":200,
            "tag2":"2S"
         },
         {
            "eka2":1,
            "anz2":2,
            "kos2":400,
            "tag2":"2U"
         },
         {
            "eka2":1,
            "anz2":2,
            "kos2":400,
            "tag2":"2V"
         },
         {
            "eka2":0.0312,
            "anz2":64,
            "kos2":3500,
            "tag2":"2Z"
         },
         {
            "eka4":1,
            "anz4":10,
            "kos4":2000,
            "tag4":"4K"
         },
         {
            "eka4":1,
            "anz4":25,
            "kos4":5000,
            "tag4":"4R"
         },
         {
            "eka4":0.85,
            "anz4":40,
            "kos4":7100,
            "tag4":"4U"
         },
         {
            "eka5":1,
            "anz5":16,
            "kos5":3200,
            "tag5":"5A"
         },
         {
            "eka5":0.875,
            "anz5":8,
            "kos5":1450,
            "tag5":"5B"
         },
         {
            "eka5":1,
            "anz5":1,
            "kos5":200,
            "tag5":"5C"
         },
         {
            "eka5":0.3333,
            "anz5":3,
            "kos5":300,
            "tag5":"5D"
         },
         {
            "eka5":0,
            "anz5":1,
            "kos5":50,
            "tag5":"5F"
         },
         {
            "eka5":0.5,
            "anz5":6,
            "kos5":750,
            "tag5":"5G"
         },
         {
            "eka5":1,
            "anz5":33,
            "kos5":6600,
            "tag5":"5K"
         },
         {
            "eka5":0.5,
            "anz5":2,
            "kos5":250,
            "tag5":"5R"
         },
         {
            "eka5":0.5,
            "anz5":4,
            "kos5":500,
            "tag5":"5S"
         },
         {
            "eka5":0.5,
            "anz5":8,
            "kos5":1000,
            "tag5":"5W"
         },
         {
            "eka6":1,
            "anz6":5,
            "kos6":1000,
            "tag6":"6A"
         },
         {
            "eka6":0,
            "anz6":1,
            "kos6":50,
            "tag6":"6B"
         },
         {
            "eka6":1,
            "anz6":1,
            "kos6":200,
            "tag6":"6P"
         },
         {
            "eka6":1,
            "anz6":1,
            "kos6":200,
            "tag6":"6U"
         },
         {
            "eka9":1,
            "anz9":4,
            "kos9":800,
            "tag9":"9 "
         },
         {
            "ekaB":0.8605,
            "anzB":43,
            "kosB":7700,
            "tagB":"BF"
         },
         {
            "ekaG":1,
            "anzG":2,
            "kosG":400,
            "tagG":"GF"
         },
         {
            "ekaG":1,
            "anzG":1,
            "kosG":200,
            "tagG":"GT"
         },
         {
            "ekaG":0,
            "anzG":1,
            "kosG":50,
            "tagG":"GU"
         },
         {
            "ekaM":0.9592,
            "anzM":49,
            "kosM":9500,
            "tagM":"MS"
         },
         {
            "ekaO":0.95,
            "anzO":80,
            "kosO":15400,
            "tagO":"OD"
         },
         {
            "ekaO":1,
            "anzO":5,
            "kosO":1000,
            "tagO":"OE"
         },
         {
            "ekaO":1,
            "anzO":7,
            "kosO":1400,
            "tagO":"OL"
         },
         {
            "ekaO":1,
            "anzO":11,
            "kosO":2200,
            "tagO":"OM"
         },
         {
            "ekaO":1,
            "anzO":16,
            "kosO":3200,
            "tagO":"OP"
         },
         {
            "ekaO":1,
            "anzO":46,
            "kosO":9200,
            "tagO":"OR"
         },
         {
            "ekaO":1,
            "anzO":1,
            "kosO":200,
            "tagO":"OV"
         },
         {
            "ekaT":1,
            "anzT":12,
            "kosT":2400,
            "tagT":"T "
         }
      ]
   },
   {
      "t":"2016-09-01T00:00:00",
      "c":1542,
      "d":[
         {
            "eka1":1,
            "anz1":25,
            "kos1":5000,
            "tag1":"1E"
         },
         {
            "eka1":1,
            "anz1":4,
            "kos1":800,
            "tag1":"1F"
         },
         {
            "eka1":1,
            "anz1":7,
            "kos1":1400,
            "tag1":"1K"
         },
         {
            "eka1":1,
            "anz1":27,
            "kos1":5400,
            "tag1":"1N"
         },
         {
            "eka1":1,
            "anz1":33,
            "kos1":6600,
            "tag1":"1R"
         },
         {
            "eka2":0.8095,
            "anz2":21,
            "kos2":3600,
            "tag2":"2A"
         },
         {
            "eka2":1,
            "anz2":4,
            "kos2":800,
            "tag2":"2D"
         },
         {
            "eka2":0.6,
            "anz2":5,
            "kos2":700,
            "tag2":"2E"
         },
         {
            "eka2":0.1333,
            "anz2":75,
            "kos2":5250,
            "tag2":"2F"
         },
         {
            "eka2":0.4302,
            "anz2":86,
            "kos2":9850,
            "tag2":"2G"
         },
         {
            "eka2":0.7703,
            "anz2":74,
            "kos2":12250,
            "tag2":"2K"
         },
         {
            "eka2":1,
            "anz2":7,
            "kos2":1400,
            "tag2":"2L"
         },
         {
            "eka2":1,
            "anz2":1,
            "kos2":200,
            "tag2":"2Q"
         },
         {
            "eka2":1,
            "anz2":322,
            "kos2":64400,
            "tag2":"2R"
         },
         {
            "eka2":1,
            "anz2":3,
            "kos2":600,
            "tag2":"2U"
         },
         {
            "eka2":1,
            "anz2":7,
            "kos2":1400,
            "tag2":"2V"
         },
         {
            "eka2":0.0345,
            "anz2":58,
            "kos2":3200,
            "tag2":"2Z"
         },
         {
            "eka4":1,
            "anz4":3,
            "kos4":600,
            "tag4":"4A"
         },
         {
            "eka4":1,
            "anz4":1,
            "kos4":200,
            "tag4":"4F"
         },
         {
            "eka4":1,
            "anz4":1,
            "kos4":200,
            "tag4":"4H"
         },
         {
            "eka4":1,
            "anz4":28,
            "kos4":5600,
            "tag4":"4K"
         },
         {
            "eka4":1,
            "anz4":44,
            "kos4":8800,
            "tag4":"4R"
         },
         {
            "eka4":0.6667,
            "anz4":45,
            "kos4":6750,
            "tag4":"4U"
         },
         {
            "eka5":1,
            "anz5":29,
            "kos5":5800,
            "tag5":"5A"
         },
         {
            "eka5":1,
            "anz5":6,
            "kos5":1200,
            "tag5":"5B"
         },
         {
            "eka5":0.5,
            "anz5":2,
            "kos5":250,
            "tag5":"5C"
         },
         {
            "eka5":1,
            "anz5":2,
            "kos5":400,
            "tag5":"5D"
         },
         {
            "eka5":0.6667,
            "anz5":6,
            "kos5":900,
            "tag5":"5F"
         },
         {
            "eka5":0.6,
            "anz5":10,
            "kos5":1400,
            "tag5":"5G"
         },
         {
            "eka5":1,
            "anz5":61,
            "kos5":12200,
            "tag5":"5K"
         },
         {
            "eka5":1,
            "anz5":1,
            "kos5":200,
            "tag5":"5R"
         },
         {
            "eka5":0.8571,
            "anz5":7,
            "kos5":1250,
            "tag5":"5S"
         },
         {
            "eka5":1,
            "anz5":1,
            "kos5":200,
            "tag5":"5W"
         },
         {
            "eka6":1,
            "anz6":5,
            "kos6":1000,
            "tag6":"6A"
         },
         {
            "eka6":1,
            "anz6":2,
            "kos6":400,
            "tag6":"6B"
         },
         {
            "eka6":1,
            "anz6":1,
            "kos6":200,
            "tag6":"6P"
         },
         {
            "eka6":1,
            "anz6":1,
            "kos6":200,
            "tag6":"6U"
         },
         {
            "eka9":1,
            "anz9":1,
            "kos9":200,
            "tag9":"9 "
         },
         {
            "ekaB":0.9412,
            "anzB":119,
            "kosB":22750,
            "tagB":"BF"
         },
         {
            "ekaG":1,
            "anzG":4,
            "kosG":800,
            "tagG":"GF"
         },
         {
            "ekaG":1,
            "anzG":1,
            "kosG":200,
            "tagG":"GP"
         },
         {
            "ekaG":0,
            "anzG":1,
            "kosG":50,
            "tagG":"GU"
         },
         {
            "ekaM":0.9891,
            "anzM":92,
            "kosM":18250,
            "tagM":"MS"
         },
         {
            "ekaO":0.9732,
            "anzO":112,
            "kosO":21950,
            "tagO":"OD"
         },
         {
            "ekaO":1,
            "anzO":9,
            "kosO":1800,
            "tagO":"OE"
         },
         {
            "ekaO":1,
            "anzO":12,
            "kosO":2400,
            "tagO":"OL"
         },
         {
            "ekaO":1,
            "anzO":22,
            "kosO":4400,
            "tagO":"OM"
         },
         {
            "ekaO":1,
            "anzO":27,
            "kosO":5400,
            "tagO":"OP"
         },
         {
            "ekaO":1,
            "anzO":111,
            "kosO":22200,
            "tagO":"OR"
         },
         {
            "ekaO":1,
            "anzO":5,
            "kosO":1000,
            "tagO":"OV"
         },
         {
            "ekaT":1,
            "anzT":11,
            "kosT":2200,
            "tagT":"T "
         }
      ]
   }
]
该数组由任意数量的具有时间戳t(月的第一天)的相同对象、条目总数c以及数据数组d组成。数据数组始终包含四个属性:ekaX(百分比)、anxx(计数)、kosX(十进制值)和tagX(字符串值;组名),而X可以是任意字母数字字符(始终与tagX的第一个字符相同)

对于图表,我需要聚合这些值。这意味着,应将anzX和kosX相加,所得ekaX应为加权平均值,anzX为权重,tagX应保留为组名。不能聚合具有不同tagX值的对象。结果应该是单个d类型对象

我研究了很长时间,但还没有找到一个简单的方法。reduce()似乎是一个合适的方法,但我不知道在如此复杂的上下文中是否可以使用它,以及如何使用它


如果有一位更高级的JavaScript开发人员能帮助我,我将非常感激。我的重点是vb.net,所以我对JavaScript非常陌生。

收集所有值并使用哈希表构建新对象

var dbSource=[{t:“2016-10-01T00:00:00”,c:968,d:[{eka1:1,anz1:22,kos1:4400,tag1:1E},{eka1:1,anz1:1,kos1:200,tag1:1K},{eka1:1,anz1:12,kos1:2400,tag1:1N},{eka1:1,anz1:41,kos1:8200,tag1:1R},{eka2:11,kosanz2:1600,tag2:1200,tag2,{,{eka2:1,anz2:2,kos2:400,tag2:2E},{eka2:0.1839,anz2:87,kos2:6750,tag2:2F},{eka2:0.1613,anz2:31,kos2:2300,tag2:2G},{eka2:0.6724,anz2:58,kos2:8750,tag2:2K},{eka2:1,anz2:200,tag2:2L},{eka2:1,anz2:3,tag2:3,tag2:200,{,{eka2:1,anz2:1,kos2:200,tag2:“2S”},{eka2:1,anz2:400,tag2:“2U”},{eka2:1,anz2:2,kos2:400,tag2:“2V”},{eka2:0.0312,anz2:64,kos2:3500,tag2:“2Z”},{eka4:1,anz4:10,kos4:2000,tag4:“4K”},{eka4:1,anz4:25,kos4:5000,tag4:“4ekr 7500,anz4:40,{,{eka5:1,anz5:16,kos5:3200,tag5:5A},{eka5:0.875,anz5:8,kos5:1450,tag5:5B},{eka5:1,anz5:1,anz5:200,tag5:5C},{eka5:0.3333,anz5:3,kos5:300,tag5:5D},{eka5:0,anz5:1,kos5:50,tag5:5F},{eka5:0.5,anz5:6,kos5:500,tag5:750,tag5:6605,{,{eka5:0.5,anz5:2,kos5:250,tag5:“5R”},{eka5:0.5,anz5:500,tag5:“5S”},{eka5:0.5,anz5:8,kos5:1000,tag5:“5W”},{eka6:1,anz6:5,kos6:1000,tag6:“6A”},{eka6:0,anz6:1,kos6:50,tag6:“6B”},{eka6:1,anz6:1,anz6:200,tag6:200,tag6:“tag6:6”},{eka9:1,anz9:4,kos9:800,tag9:“9”},{ekaB:0.8605,anzB:43,kosB:7700,tagB:“BF”},{ekaG:1,anzG:2,kosG:400,tagG:“GF”},{ekaG:1,anzG:200,tagG:“GT”},{ekaG:0,anzG:1,kosG:50,tagG:“GU”},{ekaM:0.9592,anzM:49,kosM:9500,TAGGO:“MS:1540,anzO:80,{,{ekaO:1,anzO:5,kosO:1000,tagO:OE},{ekaO:1,anzO:1400,tagO:OL},{ekaO:1,anzO:11,kosO:2200,tagO:OM},{ekaO:1,anzO:16,kosO:3200,tagO:OP},{ekaO:1,anzO 46,kosO:9200,tagO:},{“2016-09-01T00:00:00”,c:1542,d:[{eka1:1,anz1:25,anz1:5000,tag1:“1E”},{eka1:1,anz1:4,kos1:800,tag1:“1F”},{eka1:1,anz1:7,kos1:1400,tag1:“1K”},{eka1:1,anz1:27,kos1:5400,tag1:“1N”},{eka1:1:1,anz1:33,kos1:6600,tag1:“1R”},tag1:1:“1R”},anz2:3602,{,{eka2:1,anz2:4,kos2:800,tag2:2D},{eka2:0.6,anz2:5,kos2:700,tag2:2E},{eka2:0.1333,anz2:75,kos2:5250,tag2:2F},{eka2:0.4302,anz2:86,kos2:9850,tag2:2G},{eka2:0.7703,anz2:74,kos2:12250,tag2:2K},{eka2:1,anz2:7,tag2:1400,{,{eka2:1,anz2:322,kos2:64400,tag2:“2R”},{eka2:1,anz2:600,tag2:“2U”},{eka2:1,anz2:7,kos2:1400,tag2:“2V”},{eka2:0.0345,anz2:58,kos2:3200,tag2:“2Z”},{eka4:1,anz4:3,kos4:600,tag4:“4A”},{eka4:1,anz4:1,tag4:200,{,{eka4:1,anz4:28,kos4:5600,tag4:“4K”},{eka4:1,anz4:44,kos4:8800,tag4:“4R”},{eka4:0.6667,anz4:45,kos4:6750,tag4:“4U”},{eka5:1,anz5:29,kos5:5800,tag5:“5A”},{eka5:1,anz5:6,kos5:1200,tag5:“5B”},{eka5:0.5,anz5:2,tag5:250,tag5:“tag5:400,{,{eka5:0.6667,anz5:6,kos5:900,tag5:“5F”},{eka5:0.6,anz5:10,kos5:1400,tag5:“5G”},{eka5:1,anz5:61,kos5:12200,tag5:“5K”},{eka5:1,anz5:1,kos5:200,tag5:“5R”},{eka5:0.8571,anz5:7,kos5:1250,tag5:“5S”},{,{eka6:1,anz6:2,kos6:400,tag6:6B},{eka6:1,kos6:200,tag6:6P},{eka6:1,anz6:1,kos6:200,tag6:6U},{eka9:1,anz9:1,kos9:200,tag9:9},{ekaB:0.9412,anzB:119,kosB:22750,tagB:BF},{ekaG:1,anzG:4,kosG 800,tagG:200,tagG:200,{ekaG:1,anzG:200,{,{ekaG:0,anzG:1,kosG:50,tagG:“GU”},{ekaM:0.9891,anzM:92,kosM:18250,tagM:“MS”},{ekaO:0.9732,anzO:112,kosO:21950,tagO:“OD”},{ekaO:1,anzO 9,kosO:1800,ta