如何使用rxjs将数据库数组转换为此。我需要分组键
[
{ date: 'mydate',
exam: {
hb: 10,
ht: 30,
plq: 250,
cr: 1.2
}},
{ date: 'mydate1',
exam: {
hb: 13,
tap: 1,
plq: 210,
ck: 300
}}
];
对此(我需要按考试的每个键,并在发生时将多个值与它们的日期分开(:
[
{
exam: 'hb',
regs: [
{date: 'mydate1', value: 10},
{date: 'mydate2', value: 13}
]
},
{
exam: 'ht',
regs: [
{data: 'mydate1', value: 30},
]
},
{
exam: 'plq',
regs: [
{date: 'mydate1', value: 250},
{date: 'mydate2', value: 210},
]
}
];
您可以使用array#reduce
,object#keys
和array#forEach
。通过您的数组和exam
中的所有键迭代,创建一个对象,并在数组中为重复的键推值。然后使用Object.values()
var data = [ { date: 'mydate', exam: { hb: 10, ht: 30, plq: 250, cr: 1.2 }}, { date: 'mydate1', exam: { hb: 13, tap: 1, plq: 210, ck: 300 }} ],
result = Object.values(data.reduce((r,{date, exam}) => {
Object.keys(exam).forEach(k => {
r[k] = r[k] || {exam : k , regs : []};
r[k].regs.push({date, value: exam[k]})
});
return r;
},{}));
console.log(result);