繁体   English   中英

如何在javascript中将多个数组合并到单个数组中

[英]How to merge merge multiple array to single array in javascript

我有多个数组,其中有多种类型的数据,例如:

 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 ,并将值映射到新对象中。

 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 }], dist = [{ id: 251, name: 'dist1' }, { id: 252, name: 'dist2' }], zone = [{ id: 25106, name: 'zone1' }, { id: 25212, name: 'zone2' }], distMap = new Map(dist.map(({ id, name: distname }) => [id, { distname }])), zoneMap = new Map(zone.map(({ id, name: zonename }) => [id, { zonename }])), merged = student.map(({ id, name, year, dist_id, zone_id }) => Object.assign( { id, name, year }, distMap.get(dist_id), zoneMap.get(zone_id) )); console.log(merged); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

您可以将student数组map()到所需的merge数组,其中,对于每个映射迭代,您将在distzone数组中搜索分别在dist_idzone_id上匹配的项,并将其name合并到映射结果中:

 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' } ]; // Perform a mapping over the student array to aquire merge array in required // format, with required distname/zonename data var merge = student.map((s) => { // Search dist and zone arrays for items that match of dist_id/zone_id // by filtering and mapping these arrays to find distname and zonename // for this student 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]; return { id : s.id, name : s.name, year : s.year, distname : distname, zonename : zonename } }); console.log('required merge array:', merge) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM