javascript - 基于键将一个数组嵌套到另一个数组中
问题描述
我有两个数组,我需要使用 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);
推荐阅读
- python - 枕头:无法从“PIL”导入名称“_imaging”
- java - 如何制作 JSON 记录
- laravel - 通过 ec2 docker ES 在您的集群中找不到活动节点
- java - 当我使用来自前端的 ajax 请求访问 Tomcat、maven 中的 db 时出现 CORS 标头错误
- android - 如何在安卓应用中播放多个直播?
- sql-server - 在合并复制中列出冲突列名
- magento - “你大炮进行这种操作,你的reCaptcha声誉太低了”——这是什么意思,好像在向一个5岁的孩子解释?:)
- python - 在heroku上托管一个python discord bot
- javascript - JS 避免在多个位置使用相同的 if 语句
- java - 如何更改 javax.swing 中标题栏的颜色?