javascript - 根据键将一个数组嵌套到另一个数组中

标签 javascript arrays json

我有两个数组,需要使用 JavaScript 根据帐号将两个数组合并为一个数组,方法是将“成员”嵌套在“主”帐户持有者下。

我尝试过循环遍历两者并使用扩展运算符进行合并,但最终导致了意大利面条式的困惑。这是我的尝试之一。

  let merged = [];
  for (let i = 0; i < array1.length; i++) {
    merged.push({
      ...array1[i],
      ...array2.find(itmInner => itmInner.acccountHolderStatus === array1[i].acccountHolderStatus)
    });
  }

数组1:

[
  { accountNumber: "1111", firstName: "Jim", lastName: "Jacobs", accountHolderStatus: "main" },
  { accountNumber: "2222", firstName: "Sara", lastName: "Jones", accountHolderStatus: "main" },
  { accountNumber: "3333", firstName: "Alex", lastName: "Benson", accountHolderStatus: "main" }
]

和数组 2:

[
  { accountNumber: "1111", firstName: "Jesse", lastName: "Jacobs", accountHolderStatus: "member" },
  { accountNumber: "1111", firstName: "Pearl", lastName: "Jacobs", accountHolderStatus: "member" },
  { accountNumber: "2222", firstName: "Timothy", lastName: "Jones", accountHolderStatus: "member" },
  { accountNumber: "3333", firstName: "Belle", lastName: "Benson", accountHolderStatus: "member" },
  { accountNumber: "3333", firstName: "Chris", lastName: "Benson", accountHolderStatus: "member" }
]

我需要最终的数组如下所示:

[
  {
    accountNumber: "1111",
    firstName: "Jim",
    lastName: "Jacobs",
    accountHolderStatus: "main",
    members: [
      { 
        accountNumber: "1111",
        firstName: "Jesse",
        lastName: "Jacobs",
        accountHolderStatus: "member"
      },
      {
        accountNumber: "1111",
        firstName: "Pearl",
        lastName: "Jacobs",
        accountHolderStatus: "member"
      }
    ]
  },
  {
    accountNumber: "2222",
    firstName: "Sara",
    lastName: "Jones",
    accountHolderStatus: "main",
    members: [
      {
        accountNumber: "2222",
        firstName: "Timothy",
        lastName: "Jones",
        accountHolderStatus: "member"
      }
    ]
  },
  {
    accountNumber: "3333",
    firstName: "Alex",
    lastName: "Benson",
    accountHolderStatus: "main",
    members: [
      {
        accountNumber: "3333",
        firstName: "Belle",
        lastName: "Benson",
        accountHolderStatus: "member" 
      },
      { 
        accountNumber: "3333", 
        firstName: "Chris", 
        lastName: "Benson", 
        accountHolderStatus: "member" 
      }
    ]
  }
]

最佳答案

您可以使用filter()方法仅获取属于特定帐户的对象并将其分配给 members 键。

下面的代码就是您所需要的,简而言之:它循环遍历arr1中的每个帐户,然后过滤arr2中具有相同帐号的所有对象并添加将它们添加到 members 数组中。

arr1.forEach( account => {
        account.members = arr2.filter( a => a.accountNumber === account.accountNumber);
});

arr1 = [
  { accountNumber: "1111", firstName: "Jim", lastName: "Jacobs", accountHolderStatus: "main" },
  { accountNumber: "2222", firstName: "Sara", lastName: "Jones", accountHolderStatus: "main" },
  { accountNumber: "3333", firstName: "Alex", lastName: "Benson", accountHolderStatus: "main" }
];

arr2 = [
  { accountNumber: "1111", firstName: "Jesse", lastName: "Jacobs", accountHolderStatus: "member" },
  { accountNumber: "1111", firstName: "Pearl", lastName: "Jacobs", accountHolderStatus: "member" },
  { accountNumber: "2222", firstName: "Timothy", lastName: "Jones", accountHolderStatus: "member" },
  { accountNumber: "3333", firstName: "Belle", lastName: "Benson", accountHolderStatus: "member" },
  { accountNumber: "3333", firstName: "Chris", lastName: "Benson", accountHolderStatus: "member" }
];



arr1.forEach( account => {
    account.members = arr2.filter( a => a.accountNumber === account.accountNumber);
});

console.log(arr1);

关于javascript - 根据键将一个数组嵌套到另一个数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57312268/

相关文章:

javascript - 从对象列表中选取唯一的子对象并使用 Ramda 对其进行转换

javascript - enzyme 测试 React.createRef()

javascript - AngularJS:一次加载所有数据作为 JSON 与使用数据库并仅加载部分数据。什么是更好的?

javascript - 如何格式化 Google Chart 数据以显示项目数,但可以按年份过滤

javascript - jquery模拟 "fake"表单提交

arrays - 使用 Typescript 创建动态对象来重新组织 API 响应

java - 在 Java 中存储 15,000 个项目

php - 更新而不是用ajax替换wordpress自定义字段

php - 如何在 laravel 中返​​回 json 响应

javascript - 在 ExtJS 中,如何在显示网格时加载商店?