如何总结对象阵列相同的密钥值

问题描述:

我有对象的数组是这样的:如何总结对象阵列相同的密钥值

var original_db = [ 
      {date_diff:"2016/10/31", date_number:1,hangup_cause:"NORMAL_CLEARING"}, 
{date_diff:"2016/10/31", date_number:1,hangup_cause:"NORMAL_CLEARING"}, 
{date_diff:"2016/10/31", date_number:1,hangup_cause:"NO_ANSWER"}, 
{date_diff:"2016/10/31", date_number:1,hangup_cause:"ORIGINATOR-CANCEL"}, 
{date_diff:"2016/10/30", date_number:2,hangup_cause:"NORMAL_CLEARING"}, 
{date_diff:"2016/10/30", date_number:2,hangup_cause:"NO_ANSWER"}, 
{date_diff:"2016/10/30", date_number:2,hangup_cause:"NO_ANSWER"}, 
{date_diff:"2016/10/30", date_number:2,hangup_cause:"NO_ANSWER"}, 
{date_diff:"2016/10/29", date_number:3,hangup_cause:"NORMAL_CLEARING"}, 
{date_diff:"2016/10/29", date_number:3,hangup_cause:"ORIGINATOR-CANCEL"}, 
{date_diff:"2016/10/29", date_number:3,hangup_cause:"ORIGINATOR-CANCEL"}, 
     ]; 

这里是我期望的结果:

result : 
[ 
{date_diff : "2016/10/31", NORMAL_CLEARING : 2, NO_ANSWER : 1, ORIGINATOR-CANCEL : 1}, 
{date_diff : "2016/10/30", NORMAL_CLEARING : 1, NO_ANSWER : 3}, 
{date_diff : "2016/10/29", NORMAL_CLEARING : 1, ORIGINATOR-CANCEL : 2} 
] 

是否有一个简单的方法来做到这一点?

+3

是。你试过什么了? – GAntoine

+0

我试试这段代码..... var dict = {}; for(i = 0; i user7238915

+0

请回顾[问],并更新您的问题,以包括你尝试***的[mcve],否则这个问题是[off-topic(#1)](/ help/on-topic )。 – zzzzBov

for循环的每次迭代中,检查“date_number”是否与上一次迭代相同。

如果它不是相同的日期,push()数组中的对象并重置它。

此代码片段正在工作。

var original_db = [ 
 
    {date_diff:"2016/10/31", date_number:1,hangup_cause:"NORMAL_CLEARING"}, 
 
    {date_diff:"2016/10/31", date_number:1,hangup_cause:"NORMAL_CLEARING"}, 
 
    {date_diff:"2016/10/31", date_number:1,hangup_cause:"NO_ANSWER"}, 
 
    {date_diff:"2016/10/31", date_number:1,hangup_cause:"ORIGINATOR-CANCEL"}, 
 
    {date_diff:"2016/10/30", date_number:2,hangup_cause:"NORMAL_CLEARING"}, 
 
    {date_diff:"2016/10/30", date_number:2,hangup_cause:"NO_ANSWER"}, 
 
    {date_diff:"2016/10/30", date_number:2,hangup_cause:"NO_ANSWER"}, 
 
    {date_diff:"2016/10/30", date_number:2,hangup_cause:"NO_ANSWER"}, 
 
    {date_diff:"2016/10/29", date_number:3,hangup_cause:"NORMAL_CLEARING"}, 
 
    {date_diff:"2016/10/29", date_number:3,hangup_cause:"ORIGINATOR-CANCEL"}, 
 
    {date_diff:"2016/10/29", date_number:3,hangup_cause:"ORIGINATOR-CANCEL"}, 
 
]; 
 
    
 
var resultArr = []; 
 
var resultObj = {}; 
 
var date_number = 1; 
 

 
for (i=0; i<original_db.length; i++) { 
 
    
 
    // If the "date_number" changed, push the object to array. 
 
    if (date_number != original_db[i]["date_number"]){ 
 
     date_number = original_db[i]["date_number"] 
 
     resultArr.push(resultObj); 
 
     resultObj = {}; 
 
    } 
 
    
 
    // Count add each "hangup_cause" and its count 
 
    resultObj["date_diff"] = original_db[i]["date_diff"]; 
 
    var value = original_db[i]["hangup_cause"]; 
 
    var count = (resultObj[value] || 0) + 1; 
 
    resultObj[value] = count; 
 
} 
 

 
// Push the last object at the end of the loop 
 
resultArr.push(resultObj); 
 

 
// Show it in console. 
 
console.log(JSON.stringify(resultArr))