像JSON属性和sum值一样组合

Combine like JSON properties and sum values

本文关键字:一样 组合 JSON 属性 sum      更新时间:2023-09-26

我有这样的东西:

[
    {
        "SalesRep": "Bob",
        "Market": "Market1",
        "Revenue": "1000"
    },
    {
        "SalesRep": "Mary",
        "Market": "Market2",
        "Revenue": "2000"
    },
    {
        "SalesRep": "Amy",
        "Market": "Market1",
        "Revenue": "3000"
    },
    {
        "SalesRep": "Cody",
        "Market": "Market2",
        "Revenue": "5000"
    }
]

我想得到的是另一个对象,它像市场一样结合在一起,并将收入相加,所以上面的内容是:

[
    {
        "Market": "Market1",
        "Revenue": "4000"
    },
    {
        "Market": "Market2",
        "Revenue": "7000"
    }
]

我不知道如何在topMarkets上迭代来搜索里面是否存在市场。我尝试过很多不同的东西,但这可能是我最接近的一次。

var topMarkets = [];
$.each( data, function( k, v ) {
    for(var i=0; i<data.length; i++) {
         if (topMarkets.length == 0) {
             topMarkets.push({"Market":v.Market, "Revenue":parseFloat(v.Revenue)});
         } else {
             //how to check if topMarkets[i]["Market"] == v.Market ?
             //push to topMarkets here if v.Market does not exist in topMarkets
         }
    }
});

只需要迭代和检查!

var totalRevenues = [];
for (var i = 0; i < data.length; i++) {
    var market = data[i].Market;
    var index = getMarketIndex(totalRevenues, market);
    var revenue = parseInt(data[i].Revenue, 10);
    if (index != -1) {  
        totalRevenues[index].Revenue += revenue;
    } else {
        totalRevenues.push({Market: market, Revenue: revenue});
    }
}
function getMarketIndex(array, market) {
    for (var i = 0; i < array.length; i++) {
        if (array[i].Market == market) {
            return i;
        }
    }
    return -1;
}

工作演示:http://jsfiddle.net/hcgawe3p/