Javascript 对相同值上的项数组进行分组

Javascript 对相同值上的项数组进行分组,javascript,json,angular,typescript,Javascript,Json,Angular,Typescript,嗨,我有如下数组: 我的阵列: [ { "Id": 72, "PropertyId": 58, "folderName": "test2", "supportingDocs": [ { "FilePath": "path", "FileName": "green-logo.png", "UploadedDate": "2020-04-29T15:00:41.423" } ] }

嗨,我有如下数组:

我的阵列:

[
  {
    "Id": 72,
    "PropertyId": 58,
    "folderName": "test2",
    "supportingDocs": [
      {
        "FilePath": "path",
        "FileName": "green-logo.png",
        "UploadedDate": "2020-04-29T15:00:41.423"
      }
    ]
  },
  {
    "Id": 71,
    "PropertyId": 58,
    "folderName": "test1",
    "supportingDocs": [
      {
        "FilePath": "path",
        "FileName": "red-logo.png",
        "UploadedDate": "2020-04-29T15:00:41.423"
      }
    ]
  },
   {
    "Id": 70,
    "PropertyId": 58,
    "folderName": "test2",
    "supportingDocs": [
      {
        "FilePath": "path",
        "FileName": "orange-logo.png",
        "UploadedDate": "2020-04-29T15:00:41.423"
      }
    ]
  }
]
如果FolderName相同,我想分组为一个,并在supportingDocs数组中添加两个常用文件夹supportingDocs的数据,因此我希望像这样输出:

[
  {
    "Id": 72,
    "PropertyId": 58,
    "folderName": "test1",
    "supportingDocs": [
      {
        "FilePath": "path",
        "FileName": "green-logo.png",
        "UploadedDate": "2020-04-29T15:00:41.423"
      }
    ]
  },
  {
    "Id": 71,
    "PropertyId": 58,
    "folderName": "test2",
    "supportingDocs": [
      {
        "FilePath": "path",
        "FileName": "red-logo.png",
        "UploadedDate": "2020-04-29T15:00:41.423"
      },{
        "FilePath": "path",
        "FileName": "orange-logo.png",
        "UploadedDate": "2020-04-29T15:00:41.423"
      }
    ]
  }

]

我尝试过使用indexOf,但如果foldername是相同的,就无法对组数组使用任何解决方案。下面是一个示例,它使用:

在我的代码中,我也使用,和

请查看下面的可运行代码段

const数据=[
{
“Id”:72,
“财产ID”:58,
“folderName”:“test2”,
“支持文档”:[
{
“文件路径”:“路径”,
“文件名”:“green logo.png”,
“上传日期”:“2020-04-29T15:00:41.423”
}
]
},
{
“Id”:71,
“财产ID”:58,
“folderName”:“test1”,
“支持文档”:[
{
“文件路径”:“路径”,
“文件名”:“red logo.png”,
“上传日期”:“2020-04-29T15:00:41.423”
}
]
},
{
“Id”:70,
“财产ID”:58,
“folderName”:“test2”,
“支持文档”:[
{
“文件路径”:“路径”,
“文件名”:“orange logo.png”,
“上传日期”:“2020-04-29T15:00:41.423”
}
]
}
]
const result=data.reduce((acc,curr)=>{
const existing=acc.find(e=>e.folderName==curr.folderName);
如果(现有){
existing.supportingDocs=existing.supportingDocs.concat(当前supportingDocs);
}否则{
加速推力(电流);
}
返回acc;
}, []);
控制台日志(结果)一种愚蠢的方式:

让原点=[
{
“Id”:72,
“财产ID”:58,
“folderName”:“test2”,
“支持文档”:[
{
“文件路径”:“路径”,
“文件名”:“green logo.png”,
“上传日期”:“2020-04-29T15:00:41.423”
}
]
},
{
“Id”:71,
“财产ID”:58,
“folderName”:“test1”,
“支持文档”:[
{
“文件路径”:“路径”,
“文件名”:“red logo.png”,
“上传日期”:“2020-04-29T15:00:41.423”
}
]
},
{
“Id”:70,
“财产ID”:58,
“folderName”:“test2”,
“支持文档”:[
{
“文件路径”:“路径”,
“文件名”:“orange logo.png”,
“上传日期”:“2020-04-29T15:00:41.423”
}
]
}
];
设temp=[];
让输出=[];
用于(输入源代码){
让每个=原点[键];
让folderName=each[“folderName”];
if(临时包括(文件夹名称)){
//如果foldername已存在。
用于(输出中的i){
if(getKeyByValue(输出[i],folderName)!=未定义){
输出[i][“supportingDocs”].push(每个[“supportingDocs”][0]);
}
}
}否则{
//如果foldername不存在
温度推送(folderName);
输出。推送(每个);
}
}
控制台日志(输出);
//按值查找对象键,而不是递归。
函数getKeyByValue(对象,值){
返回Object.keys(Object.find)(key=>Object[key]==value);
}
const result = data.reduce((acc, curr) => {  
  const existing = acc.find(e => e.folderName == curr.folderName);
  if (existing) {
    existing.supportingDocs = existing.supportingDocs.concat(curr.supportingDocs);
  } else {
    acc.push(curr);
  }
  return acc;
}, []);