【问题标题】:Creating a new key from child elements in Json with Javascript使用 Javascript 从 Json 中的子元素创建新键
【发布时间】:2019-05-26 01:17:55
【问题描述】:

我想使用 ES6/ES5 从 json 中的子值创建新键。我尝试了箭头函数,但我无法得到结果。首先你可以在下面看到我的 json 部分,

[  
   {  
      matchId:307,
      matchStatusId:5,
      matchHomeScore:0,
      matchAwayScore:0,
      matchTime:0,
      homeClubId:608,
      homeClub:{  
         clubId:608,
         clubName:"Annaba"
      },
      awayClubId:609,
      awayClub:{  
         clubId:609,
         clubName:"Bazer Sakhra"
      },
      leagues:[  
         {  
            leagueId:65,
            parentLeagueId:null,
            leagueName:"ALGERIA"
         },
         {  
            leagueId:66,
            parentLeagueId:65,
            leagueName:"Algeria Cup"
         }
      ]
   },
]

我想创建新的父键。它将从子项的值中获取值并将其合并。子项编号可变。不是每次 2 项。 leaguesGeneral:“阿尔及利亚 - 阿尔及利亚杯”

   leaguesGeneral:"ALGERIA - Algeria Cup"   
   leagues: [  
      {  
         leagueId:65,
         parentLeagueId:null,
         leagueName:"ALGERIA"
      },
      {  
         leagueId:66,
         parentLeagueId:65,
         leagueName:"Algeria Cup"
      }
   ]

我找到了这个方法。但它结合了父级的所有内容。

data = data.map(function (x) {
    var keys = Object.keys(x);
    x.newKeyValue = keys.map(key => x[key]).join('-');
    return x;
});

【问题讨论】:

  • 您是否有基于示例 JSON 的预期输出示例?
  • 我不明白你想在这里完成什么。生成的 JSON 应该是什么?
  • 您可以使用下面的代码data.forEach(o => o.leaguesGeneral = o.leagues.map(({leagueName}) => leagueName).join(' - '));
  • 我举例说明了。我想创建这样的leaguesGeneral:"ALGERIA - Algeria Cup"
  • @MehmetDemiray 你想保留原始 JSON 对象的所有其余部分,还是只保留leaguesGeneral 和leagues 部分?不清楚。

标签: javascript json ecmascript-6 arrow-functions


【解决方案1】:

leaguesGeneral 键可以使用

添加到数组中的每个对象
o.leagues.map(({ leagueName }) => leagueName).join(' - ')

const data = [  
   {  
      matchId:307,
      matchStatusId:5,
      matchHomeScore:0,
      matchAwayScore:0,
      matchTime:0,
      homeClubId:608,
      homeClub:{  
         clubId:608,
         clubName:"Annaba"
      },
      awayClubId:609,
      awayClub:{  
         clubId:609,
         clubName:"Bazer Sakhra"
      },
      leagues:[  
         {  
            leagueId:65,
            parentLeagueId:null,
            leagueName:"ALGERIA"
         },
         {  
            leagueId:66,
            parentLeagueId:65,
            leagueName:"Algeria Cup"
         }
      ]
   },
];

const result = data.map(o => {
  if (o.leagues) {
    o.leaguesGeneral = o.leagues.map(({ leagueName }) => leagueName).join(' - ');
  }
  return o;
})

console.log(result)

【讨论】:

  • 非常快速的回答!谢谢你:)
猜你喜欢
  • 1970-01-01
  • 2015-11-19
  • 2012-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
  • 2020-02-27
相关资源
最近更新 更多