Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何通过嵌套键将可观察数据分组?_Angular_Typescript_Observable - Fatal编程技术网

Angular 如何通过嵌套键将可观察数据分组?

Angular 如何通过嵌套键将可观察数据分组?,angular,typescript,observable,Angular,Typescript,Observable,我构建了一个新的应用程序,但我在分组数据方面遇到了问题:/基本上,这些数据来自observable,我需要按状态对对象进行分组,并将其推送到数组中。我尝试使用groupBy(),但没有成功 这就是我所拥有的: const data = [ { id: 3424234, name: "asdfgasdgas", protocol: 235452345, status: { code: "AVAILABLE", displayName: "

我构建了一个新的应用程序,但我在分组数据方面遇到了问题:/基本上,这些数据来自observable,我需要按状态对对象进行分组,并将其推送到数组中。我尝试使用groupBy(),但没有成功

这就是我所拥有的:

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接口,所以无法使用
重新格式化
。因此您的解决方案应该适用于任何数据,但目前还没有