JSON对多个对象求和,其中值包含字符串

时间:2014-07-10 17:04:20

标签: javascript json d3.js sum

我正在使用基于d3.js的viz工具实时绘制数据。我单独绘制每个系列的图表,我也想绘制总和。

如何遍历包含解析器*的每个对象,添加y值以便parserSum = 50

data = [
{
    "y": 20,
    "label": "parser1",
    "time": 1404999005
},
{
    "y": 30,
    "label": "parser2",
    "time": 1404999005
},
{
    "y": 15,
    "label": "reader1",
    "time": 1404999005
}]

修改 使用@ juvian的答案,这是我的最终结果:

http://jsfiddle.net/yeehawjared/u9Ppd/1/

var procs = ["parser", "reader", "writer"];
for (var i = 0; i < procs.length; i++) {
    var sum = 0;
    for (var x = 0; x < data.length; x++) {
        var obj = data[x];
        if (obj.label.indexOf(procs[i]) != -1) {
            sum += obj.y;
        }
    }
    console.log(procs[i], sum)
}

2 个答案:

答案 0 :(得分:2)

您可以尝试检查标签是否使用indexOf构造解析器,然后将其与

求和
var sum=0;
for(var i=0;i<data.length;i++){
    var obj=data[i];
    if(obj.label.indexOf("parser") != -1){
        sum+=obj.y;
    }
}
console.log(sum)

答案 1 :(得分:1)

您还可以在阵列上使用.reduce方法。它看起来像这样:

var sum = data.reduce(function(lastValue, currentElement){
  return currentElement.label.indexOf('parser') !== -1 ?
    lastValue + currentElement.y : 0;
}, 0);