如何在javascript中将多个数组合并到单个数组
我有多个数组,其中有多种类型的数据,例如:如何在javascript中将多个数组合并到单个数组,javascript,arrays,merge,combinations,multiple-columns,Javascript,Arrays,Merge,Combinations,Multiple Columns,我有多个数组,其中有多种类型的数据,例如: var student= [{ id : 1, name : 'name1', year: 2016, dist_id: 251, zone_id: 25106 }, { id : 1, name : 'name2', year: 2018, dist_id: 252, zone_id: 25212 },];
var student= [{
id : 1,
name : 'name1',
year: 2016,
dist_id: 251,
zone_id: 25106
},
{
id : 1,
name : 'name2',
year: 2018,
dist_id: 252,
zone_id: 25212
},];
var dist= [{
id : 251,
name : 'dist1'
},
{
id : 252,
name : 'dist2'
}];
var zone= [{
id : 25106,
name : 'zone1'
},
{
id : 25212,
name : 'zone2'
}];
我想创建一个数组,将所有数据合并为一个,以便数组中的字段如下所示:
var merge = [{
id: 1,
name : 'name1',
year: 2016,
distname : 'dist1',
zonename: 'zone1',
},
{
id: 2,
name : 'name2',
year: 2018,
distname : 'dist2',
zonename: 'zone2',
}];
提前谢谢 您可以map()
将student
数组映射到所需的merge
数组中,对于每个映射迭代,您将在dist
和zone
数组中分别搜索与dist\u id
和zone\u id
匹配的项,并将的名称
合并到映射结果中:
var学生=[
{id:1,名称:'name1',年份:2016,地区id:251,分区id:25106},
{id:1,名称:'name2',年份:2018,地区id:252,分区id:25212}];
var dist=[
{id:251,名称:'dist1'},{id:252,名称:'dist2'}];
可变区=[
{id:25106,名称:'zone1'},{id:25212,名称:'zone2'}];
//在学生数组上执行映射,以获取所需的合并数组
//格式,带有所需的distname/zonename数据
var merge=student.map((s)=>{
//在dist和zone数组中搜索与dist\u id/zone\u id匹配的项
//通过筛选和映射这些数组来查找distname和zonename
//为了这个学生
const distname=dist.filter(d=>d.id==s.dist_id).map(d=>d.name)[0];
const zonename=zone.filter(z=>z.id==s.zone_id).map(z=>z.name)[0];
返回{
id:s.id,
姓名:s.name,
年份:美国年,
distname:distname,
zonename:zonename
}
});
log('required merge array:',merge)
您可以选择距离和区域,并映射新对象中的值
var student=[{id:1,name:'name1',年份:2016,地区id:251,地区id:25106},{id:1,name:'name2',年份:2018,地区id:252,地区id:25212}],
dist=[{id:251,名称:'dist1'},{id:252,名称:'dist2'}],
zone=[{id:25106,名称:'zone1'},{id:25212,名称:'zone2'}],
distMap=newmap(dist.Map(({id,name:distname})=>[id,{distname}]),
zoneMap=newmap(zone.Map({id,name:zonename})=>[id,{zonename}]),
合并=student.map({id,name,year,dist_id,zone_id})=>Object.assign(
{id,name,year},
distMap.get(dist_id),
zoneMap.get(区域id)
));
console.log(合并)代码>
.as控制台包装{max height:100%!important;top:0;}
您可以通过使用lodash var merge=uu.merge(arr1,arr2)来实现这一点;请包括您迄今为止的尝试以及您面临的问题