首页 > 解决方案 > 基于键将一个数组嵌套到另一个数组中

问题描述

我有两个数组,我需要使用 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" 
      }
    ]
  }
]

标签: javascriptarraysjson

解决方案


您可以使用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);


推荐阅读