简体   繁体   English

如果 projectId 匹配子项和 projectId 分组,则数据转换

[英]Data transform if projectId match children and projectId grouped

I need to group all the projectIds together and If the projectId is the same, the children should be together in the current item.我需要将所有 projectId 组合在一起,如果 projectId 相同,则孩子应该在当前项目中。 Refer to the below picture for the expected final result.请参阅下图了解预期的最终结果。

Appreciate if anyone can help me on this.感谢是否有人可以帮助我。 I'm trying to learn on the go while building functionality of an app.我正在尝试在构建应用程序功能的同时学习 go。 Thank you.谢谢你。

Current Json Format:当前 Json 格式:

[
  {
    "projectIds": "1aa",
    "children": [
      {
        "email": "alyssayo@xxx.com",
        "permissionIds": null,
        "roleIds": [
          "raa",
          "baa",
          "caa"
        ],
        "projectIds": "1aa"
      }
    ]
  },
  {
    "projectIds": "3aa",
    "children": [
      {
        "email": "alyssayo@xxx.com",
        "permissionIds": null,
        "roleIds": [
          "raa",
          "baa",
          "caa"
        ],
        "projectIds": "3aa"
      }
    ]
  },
  {
    "projectIds": "1aa",
    "children": [
      {
        "email": "chiuewww@xxx.com",
        "permissionIds": null,
        "roleIds": [
          "baa",
          "caa"
        ],
        "projectIds": "1aa"
      }
    ]
  },
  {
    "projectIds": "2aa",
    "children": [
      {
        "email": "chiuewww@xxx.com",
        "permissionIds": null,
        "roleIds": [
          "baa",
          "caa"
        ],
        "projectIds": "2aa"
      }
    ]
  },
  {
    "projectIds": "3aa",
    "children": [
      {
        "email": "chiuewww@xxx.com",
        "permissionIds": null,
        "roleIds": [
          "baa",
          "caa"
        ],
        "projectIds": "3aa"
      }
    ]
  },
  {
    "projectIds": "1aa",
    "children": [
      {
        "email": "lalaqq@xxx.com",
        "permissionIds": null,
        "roleIds": [
          "caa"
        ],
        "projectIds": "1aa"
      }
    ]
  }
]

Expected Json Format:预期 Json 格式:

const data = [
  {
    projectIds: "1aa",
    children: [
      {
        email: "alyssayo@xxx.com",
        permissionIds: null,
        roleIds: ["raa","baa","caa"],
        projectIds: "1aa",
      },
      {
        email: "chiuewww@xxx.com",
        permissionIds: null,
        roleIds: ["baa","caa"],
        projectIds: "1aa",
      },
      {
        email: "lalaqq@xxx.com",
        permissionIds: null,
        roleIds: ["caa"],
        projectIds: "1aa",
      }
    ]
  },
  {
    projectIds: "2aa",
    children: [
      {
        email: "chiuewww@xxx.com",
        permissionIds: null,
        roleIds: ["baa","caa"],
        projectIds: "2aa",
      }
    ]
  },
  {
    projectIds: "3aa",
    children: [
      {
        email: "alyssayo@xxx.com",
        permissionIds: null,
        roleIds: ["raa","baa","caa"],
        projectIds: "3aa",
      },    
      {
        email: "chiuewww@xxx.com",
        permissionIds: null,
        roleIds: ["baa","caa"],
        projectIds: "3aa",
      }
    ]
  }
];

u can use array reduce and array find,你可以使用数组减少和数组查找,

 const data = [ { "projectIds": "1aa", "children": [ { "email": "alyssayo@xxx.com", "permissionIds": null, "roleIds": [ "raa", "baa", "caa" ], "projectIds": "1aa" } ] }, { "projectIds": "3aa", "children": [ { "email": "alyssayo@xxx.com", "permissionIds": null, "roleIds": [ "raa", "baa", "caa" ], "projectIds": "3aa" } ] }, { "projectIds": "1aa", "children": [ { "email": "chiuewww@xxx.com", "permissionIds": null, "roleIds": [ "baa", "caa" ], "projectIds": "1aa" } ] }, { "projectIds": "2aa", "children": [ { "email": "chiuewww@xxx.com", "permissionIds": null, "roleIds": [ "baa", "caa" ], "projectIds": "2aa" } ] }, { "projectIds": "3aa", "children": [ { "email": "chiuewww@xxx.com", "permissionIds": null, "roleIds": [ "baa", "caa" ], "projectIds": "3aa" } ] }, { "projectIds": "1aa", "children": [ { "email": "lalaqq@xxx.com", "permissionIds": null, "roleIds": [ "caa" ], "projectIds": "1aa" } ] } ] const findMatch = (arr, projectIds) => arr.find(item => item.projectIds === projectIds) const grouppingArray = (originalArr) => { return Array.isArray(originalArr)? originalArr.reduce((previousObj, obj) => { if (findMatch(previousObj, obj.projectIds)) { findMatch(previousObj, obj.projectIds).children.push(...obj.children) } else { previousObj.push(obj) } return previousObj }, []): 'Need an array' } console.log(grouppingArray(data))

You can try array.reduce() where initialData is your current data您可以尝试 array.reduce() 其中 initialData 是您当前的数据

const data = initialData.reduce(function (r, a) {
        r[a.projectIds] = r[a.projectIds] || [];
        r[a.projectIds].push(a);
        return r;
    }, Object.create(null));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM