【问题标题】:Reduce data structure减少数据结构
【发布时间】:2016-03-09 14:43:39
【问题描述】:

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

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

用代码解释:

原始数组

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

有人知道我会怎么做吗?

提前致谢。

【问题讨论】:

    标签: arrays angularjs foreach properties reduce


    【解决方案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);
              }, []);
    

    【讨论】:

    • 看起来它可以工作。 forEach 也可以吗?
    • 如果您考虑使用 forEach 而不是 for 循环,是的,它也可以工作,但使用 for 循环会更好,因为我们迭代了一个值数组,即字符串。你可以用谷歌搜索差异。
    猜你喜欢
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 2018-11-29
    相关资源
    最近更新 更多