减少数据结构

时间:2016-03-09 14:43:39

标签: arrays angularjs foreach properties reduce

我有一个数据结构,它是一个对象数组,每个对象包含一个数组。我创建了一个函数,它返回该子数组中的每个对象,并将它们连接成一个新数组。

我想要的是将父数组中每个对象的一个​​属性与子数组中的每个对象相关联,然后将其添加到新数组中。

在代码中解释:

原始数组

var clubData =   [
      { club   : 'Manchester United',
        squad: [
            {name : 'Young'},
            {name : 'Rooney'},
            {name : 'Mata'}
                 ],  
      }
      { club   : 'Chelsea',
        squad: [
            {name : 'Hazard'},
            {name : 'Fabregas'},
            {name : 'Ivanovic'},
                 ]
      }
    ]

新的allPlayers数组

在这里,我从“小队”中提取了每一个对象。可变...

var allPlayers = [
        {name : 'Hazard'},
        {name : 'Fabregas'},
        {name : 'Ivanovic'},
        {name : 'Young'},
        {name : 'Rooney'},
        {name : 'Mata'}
    ]

... JS

allPlayers = clubData.reduce(function(a, c){
                  return a.concat(c.squad);
              }, []);

我想要的......

相同,但要将每个对象添加原始数组中的原始club属性到每个结果对象。

var allPlayers2 = [
        {name : 'Hazard'
         club : 'Chelsea' },
        {name : 'Fabregas'
         club : 'Chelsea' },
        {name : 'Ivanovic'
         club : 'Chelsea' },
        {name : 'Young'}
         club : 'Manchester United' },
        {name : 'Rooney'
         club : 'Manchester United' },
        {name : 'Mata'
         club : 'Manchester United' }
     ]

有谁知道我会怎么做呢?

提前致谢。

1 个答案:

答案 0 :(得分:1)

var allPlayers = clubData.reduce(function(a, c){
              var squad = c.squad;
              for (var i = 0; i < squad.length; i++) {
                  squad[i].club = c.club;
              }
              return a.concat(squad);
          }, []);