更改对象的嵌套数组

问题描述 投票:0回答:1

const 项目 = [

  {

    projectId: 'abc123',

    name: 'Project 1',

    userProjects: [

      {

        userId: 'xyz789',

        projectId: 'abc123',

        user: { userId: 'xyz789', email: '[email protected]' },

      },

      {

        userId: 'sdf012',

        projectId: 'abc123',

        user: { userId: 'sdf012', email: '[email protected]' },

      },

    ],

  },

  {

    projectId: 'def456',

    name: 'Project 2',

    userProjects: [

      {

        userId: 'xyz789',

        projectId: 'def456',

        user: { userId: 'xyz789', email: '[email protected]' },

      },

    ],

  },

];

到, 所需的输出: [

  {

    userId: 'xyz789',

    email: '[email protected]',

    projects: [

      { projectId: 'abc123', name: 'Project 1' },

      { projectId: 'def456', name: 'Project 2' },

    ],

  },

];

我被困在这个问题上。执行此操作的最佳动态方法是什么? 我试图映射数组,但我对内部对象“用户”感到困惑。我们可以直接更改这个数组还是只需要创建一个新函数?

我试图映射数组,但我对内部对象“用户”感到困惑。我们可以直接更改这个数组还是只需要创建一个新函数?`

javascript json api dictionary
1个回答
0
投票

你似乎有一个项目对象数组,你想将它转换成一个用户对象数组及其相关项目。这是实现此转换的功能:

function transformProjectsToUsers(projects) {
  const userMap = new Map();

  projects.forEach((project) => {
    project.userProjects.forEach((userProject) => {
      const { userId, email } = userProject.user;
      const user = userMap.get(userId) || {
        userId,
        email,
        projects: [],
      };

      user.projects.push({
        projectId: project.projectId,
        name: project.name,
      });

      userMap.set(userId, user);
    });
  });

  return Array.from(userMap.values());
}

const users = transformProjectsToUsers(projects);
console.log(users);
© www.soinside.com 2019 - 2024. All rights reserved.