如何总结对象阵列相同的密钥值
问题描述:
我有对象的数组是这样的:如何总结对象阵列相同的密钥值
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}
]
是否有一个简单的方法来做到这一点?
答
在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))
是。你试过什么了? – GAntoine
我试试这段代码..... var dict = {}; for(i = 0; i
user7238915
请回顾[问],并更新您的问题,以包括你尝试***的[mcve],否则这个问题是[off-topic(#1)](/ help/on-topic )。 – zzzzBov