我有下一个输入数组。它可以具有不同的阶段。
[
{
"id": 1,
"phase": "Planning",
},
{
"id": 2,
"phase": "Planning",
},
{
"id": 3,
"phase": "Done",
}
]
基于阶段,我想将其转换为具有下一种格式的数组。
[{title: 'Planning',
datasets: {data: [/* 1st item will be here*/]},
{data: [/* 2nd item will be here*/]}]},
{title: 'Done',
datasets: [{data: [/* 1st item will be here*/]}]
}
];
我该怎么做?
预先感谢
答案 0 :(得分:1)
不确定为什么需要rxjs,您可以仅使用javascript来实现。这是ES6的实现:
let input = [
{
"id": 1,
"phase": "Planning",
},
{
"id": 2,
"phase": "Planning",
},
{
"id": 3,
"phase": "Done",
}
]
let response = {};
input.forEach(phaseObj=> {
if(!!response[phaseObj["phase"]])
response[phaseObj["phase"]].push({data: phaseObj})
else
response[phaseObj["phase"]] = [{data: phaseObj}]
})
response = Object.keys(response).map( key=> { return {title: key, datasets : response[key]}});
console.log(response)
如果您确实坚持使用rxjs,则可以执行以下操作:
let response = {};
Rx.Observable.from(input).map(phaseObj=> {
if(!!response[phaseObj["phase"]])
response[phaseObj["phase"]].push({data: phaseObj})
else
response[phaseObj["phase"]] = [{data: phaseObj}]
})
.toArray()
.subscribe( ()=> {
response = response = Object.keys(response).map( key=> { return {title: key, datasets : response[key]}});
console.log(response);
})
答案 1 :(得分:0)
您可以使用groupBy运算符-它将按对象属性对数据进行分组