Angular 如何通过嵌套键将可观察数据分组?
我构建了一个新的应用程序,但我在分组数据方面遇到了问题:/基本上,这些数据来自observable,我需要按状态对对象进行分组,并将其推送到数组中。我尝试使用groupBy(),但没有成功 这就是我所拥有的:Angular 如何通过嵌套键将可观察数据分组?,angular,typescript,observable,Angular,Typescript,Observable,我构建了一个新的应用程序,但我在分组数据方面遇到了问题:/基本上,这些数据来自observable,我需要按状态对对象进行分组,并将其推送到数组中。我尝试使用groupBy(),但没有成功 这就是我所拥有的: const data = [ { id: 3424234, name: "asdfgasdgas", protocol: 235452345, status: { code: "AVAILABLE", displayName: "
const data = [
{
id: 3424234,
name: "asdfgasdgas",
protocol: 235452345,
status: {
code: "AVAILABLE",
displayName: "Available"
}
},
{
id: 543534,
name: "regertjerg",
protocol: 7745672345,
status: {
code: "AVAILABLE",
displayName: "Available"
}
},
{
id: 96089678,
name: "kluioliudas",
protocol: 7878745,
status: {
code: "INITIALREVIEW",
displayName: "Initial review"
}
}
]
这就是我想要的…:
const result = [
{
code: "AVAILABLE",
displayName: "Available",
items: [
{
id: 3424234,
name: "asdfgasdgas",
protocol: 235452345
},
{
id: 543534,
name: "regertjerg",
protocol: 7745672345
}
]
},
{
code: "INITIALREVIEW",
displayName: "Initial review",
items: [
{
id: 96089678,
name: "kluioliudas",
protocol: 7878745
}
]
}
]
谢谢你的帮助 您可以使用
reduce()
方法,如下所示:
result = data.reduce(function (r, a) {
r[a.status.code] = r[a.status.code] || [];
r[a.status.code].push(a);
return r;
}, Object.create(null));
这里我们按状态分组。请尝试以下操作:
const data=[{id:3424234,name:“asdfgasdgas”,协议:235452345,状态:{code:“AVAILABLE”,displayName:“AVAILABLE”},{id:543534,name:“regertjerg”,协议:7745672345,状态:{code:“AVAILABLE”,displayName:“AVAILABLE”},{id:96089678,名称:“kluioliudas”,协议:78787878745,状态:{code:“INITIALREVIEW”,displayName:“初步审查”}]
const groupBy=(arr)=>data.reduce((acc,ele)=>((acc[ele.status.code]=acc[ele.status.code]| |[])).push(ele,acc),{})
常量格式=([k,v])=>({code:k,displayName:v[0]。status.displayName,items:v.map(({id,name,protocol})=>({id,name,protocol})))
const result=Object.entries(groupBy(data)).map(ele=>reformat(ele))
控制台日志(结果);
这可能是一个容易理解的问题
let arr = [];
let statuses = [];
data.forEach(x => {
if(!arr.find(code => code == x.status.code)) {
arr.push(x.status.code);
statuses.push(x.status);
}
})
let result = statuses.map((xs:any) => {
xs.items = data.filter(y => y.status.code == xs.code)
return xs;
})
console.log(result)
您的结果中仍然显示状态字段。这不是OPI请求的结果。因为我没有const接口,所以无法使用
重新格式化
。因此您的解决方案应该适用于任何数据,但目前还没有