我正在开发一个小节点/快速实用程序,它将返回一个对象数组,每个对象都有一个日期和一组值:
var desired_result = [
{ date: "2015-09-21", values: [
{ value: "val_a", score: 2 },
{ value: "val_b", score: 4 }
],
{ date: "2015-09-22", values: [
{ value: "val_a", score: 4 },
{ value: "val_b", score: 8 }
]
]
此数据来自mysql查询,每个日期都有多个值,如:
var mysql_results = [
{ date: "2015-09-21", value: "val_a", score: 2 },
{ date: "2015-09-21", value: "val_b", score: 4 },
{ date: "2015-09-22", value: "val_a", score: 4 },
{ date: "2015-09-22", value: "val_b", score: 8 }
]
通过.reduce()
电话,这似乎相当简单,但我很难让它工作。
答案 0 :(得分:1)
我可能会使用Underscore.js库:
_.chain([
{ date: "2015-09-22", value: "val_a", score: 2 },
{ date: "2015-09-22", value: "val_b", score: 4 },
{ date: "2015-09-22", value: "val_a", score: 4 },
{ date: "2015-09-22", value: "val_b", score: 8 }
]).groupBy(function(el) {
return el.date;
}).map(function(val, key) {
return { date: key, values: val };
}).value();
结果:
[
{
"date": "2015-09-22",
"values": [
{
"date": "2015-09-22",
"value": "val_a",
"score": 2
},
{
"date": "2015-09-22",
"value": "val_b",
"score": 4
},
{
"date": "2015-09-22",
"value": "val_a",
"score": 4
},
{
"date": "2015-09-22",
"value": "val_b",
"score": 8
}
]
}
]
答案 1 :(得分:0)
我设法让.reduce()
方法有效;这种方法取决于按日期排序的数组(在我的SQL查询中完成)。
解决方案:
var mysql_results = [
{ date: "2015-09-21", value: "val_a", score: 2 },
{ date: "2015-09-21", value: "val_b", score: 4 },
{ date: "2015-09-22", value: "val_a", score: 4 },
{ date: "2015-09-22", value: "val_b", score: 8 }
]
var output = mysql_results
.map(function (result) {
// format the records as { date, values: [] }
return {
date: result.date,
values: [{value: result.value, score: result.score}]
}
})
.reduce(function (result, cur) {
if (!result.length) {
// no previous records
result.push(cur);
return result;
}
var prev = result[result.length - 1];
if (prev.date === cur.date) {
// prev record has same date - merge values
prev.values = prev.values.concat(cur.values)
result[result.length - 1] = prev;
return result;
}
// dates don't match, add new record
result.push(cur);
return result;
}, []);
哪个产生
[
{ date: "2015-09-21", values: [
{ value: "val_a", score: 2 },
{ value: "val_b", score: 4 }
]
},
{
date: "2015-09-22", values: [
{ value: "val_a", score: 4 },
{ value: "val_b", score: 8 }
]
}
]