2014-10-30 35 views
0

我有这样的事情:结合像JSON性能和和值

[ 
    { 
     "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 
     } 
    } 

}); 

回答

1

刚刚迭代并检查!

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/