我有一个像这样的对象数组:
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}
]
有一种简单的方法吗?
答案 0 :(得分:1)
在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))