【问题标题】:How to merge merge multiple array to single array in javascript如何在javascript中将多个数组合并为单个数组
【发布时间】:2018-11-29 09:03:52
【问题描述】:

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

 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',
}];

提前致谢。

【问题讨论】:

  • 你可以通过使用 lodash var merge = _.merge(arr1, arr2);
  • 请附上您迄今为止所做的尝试以及您面临的问题

标签: javascript arrays merge combinations multiple-columns


【解决方案1】:

您可以将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; }

【讨论】:

    【解决方案2】:

    您可以将map()student 数组添加到所需的merge 数组,其中,对于每个映射迭代,您将在distzone 数组中搜索与dist_id 和@987654327 匹配的项目@分别,并将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)

    【讨论】:

      猜你喜欢
      • 2015-09-28
      • 2019-03-04
      • 2019-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-26
      • 2020-06-23
      • 1970-01-01
      相关资源
      最近更新 更多