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