Javascript 基于键将一个JSON数组中的值合并到另一个数组中相应的JSON中
我有两个JSON对象数组。一个有承包商详细信息,另一个有项目。两者都有一个公共字段用户id 我想要一个对象的结果数组,这样每个承包商也有一个活动项目的数组。例如:Javascript 基于键将一个JSON数组中的值合并到另一个数组中相应的JSON中,javascript,arrays,json,array-merge,Javascript,Arrays,Json,Array Merge,我有两个JSON对象数组。一个有承包商详细信息,另一个有项目。两者都有一个公共字段用户id 我想要一个对象的结果数组,这样每个承包商也有一个活动项目的数组。例如: arr1 = [{ name: 'Contractor A', user_id: 3, mobile_number: '9999999999', active_projects: [] }, { name: 'Contractor B', user_id: 6, mobile_n
arr1 = [{
name: 'Contractor A',
user_id: 3,
mobile_number: '9999999999',
active_projects: []
},
{
name: 'Contractor B',
user_id: 6,
mobile_number: '9999999999',
active_projects: []
}]
arr2 = [{
user_id: 3, project_name: 'Project A'
},
{
user_id: 3, project_name: 'Project B'
},
{
user_id: 6, project_name: 'Project C'
}]
最终阵列应为:
arr1 = [{
name: 'Contractor A',
user_id: 3,
mobile_number: '9999999999',
active_projects: ['Project A', 'Project B']
},
{
name: 'Contractor B',
user_id: 6,
mobile_number: '9999999999',
active_projects: ['Project C']
}]
实现这一点的最佳/最干净的方法是什么?您可以使用
forEach
迭代arr2
&内部回调使用findIndex
从arr1
中查找对象的索引,该对象的用户id
与迭代对象的用户id
匹配。然后使用索引
填充第一个数组中的值
让arr1=[{
名称:“承包商A”,
用户id:3,
手机号码:“9999999999”,
活动项目:[]
},
{
名称:“承包商B”,
用户id:6,
手机号码:“9999999999”,
活动项目:[]
}
]
设arr2=[{
用户id:3,
项目名称:“项目A”
},
{
用户id:3,
项目名称:“项目B”
},
{
用户id:6,
项目名称:“项目C”
}
];
arr2.forEach((项目)=>{
const findIndexArr1=arr1.findIndex(elem=>elem.user\u id==item.user\u id);
如果(findIndexArr1!=-1){
arr1[findIndexArr1]。活动项目。推送(项。项目名称)
}
});
console.log(arr1)
您可以使用map
执行此操作:
var arr1=[{name:'承包商A',用户id:3,手机号码:'9999999',活动项目:[]},{name:'承包商B',用户id:6,手机号码:'9999999',活动项目:[]},
arr2=[{user_id:3,project_name:'project A'},{user_id:3,project_name:'project B'},{user_id:6,project_name:'project C'}];
var result=arr1.map({active_projects,…rest})=>({…rest,active_projects:arr2.filter(k=>k.user_id==rest.user_id).map(name=>name.project_name)});
控制台日志(结果)代码>您也可以为
for(arr1中的i){
对于(arr2中的j){
if(arr1[i].user\u id==arr2[j].user\u id){
arr1[i].活动项目.push(arr2[j].项目名称)
}
}
}
您可以按用户id
对项目名称
进行分组,然后只需映射
您的arr1
:
const grouped = arr2.reduce((a, {user_id, project_name}) => {
a[user_id] = a[user_id] || [];
a[user_id].push(project_name);
return a;
},{})
arr1 = arr1.map(({user_id, active_projects, ...rest}) => ({user_id,
active_projects: grouped[user_id], ...rest}));
例如:
arr1=[{
名称:“承包商A”,
用户id:3,
手机号码:“9999999999”,
活动项目:[]
},
{
名称:“承包商B”,
用户id:6,
手机号码:“9999999999”,
活动项目:[]
}]
arr2=[{
用户id:3,项目名称:“项目A”
},
{
用户id:3,项目名称:“项目B”
},
{
用户id:6,项目名称:“项目C”
}]
const group=arr2.reduce((a,{user\u id,project\u name})=>{
[user_id]=一个[user_id]| |[];
[user\u id].push(项目名称);
返回a;
},{})
arr1=arr1.map({user_id,active_projects,…rest})=>({user_id,active_projects:grouped[user_id],…rest}));
console.log(arr1)