首页 > 解决方案 > 按数组键分组

问题描述

我有一组看起来像这样的数据:

{schedules: {team_name: 'Red', color: '#...', due_date '12-12-2018', yards: []} etc

我有一个函数将它分组到一个以团队名称为键的数组中,它工作正常:

setGroupedSchedules(): void {
    let groups = {};
    let schedules = this.schedules;

    for(let schedule of schedules) {
      let teamName = (schedule.team ? schedule.team.name : 'Unassigned');
      groups[teamName] = !groups[teamName] ? [] : groups[teamName];
      groups[teamName].push(schedule);
    }
    this.grouped = groups;
  }

如何还包括每个分组的 team.color?

结果:

<div style="background:team_color">
Team: Red 
- Schedule 1
 - Yard
 - Yard
- Schedule 2
 - Yard
</div>

标签: javascriptarraysangulartypescript

解决方案


也许是这样的?

for(let schedule of schedules) {
  let teamName = (schedule.team ? schedule.team.name : 'Unassigned');
  let teamColor = (schedule.team ? schedule.team.color : 'Unassigned');
  groups[teamName] = !groups[teamName] ? [] : groups[teamName];
  colorSchedule = {color: teamColor, team: schedule.team};
  groups[teamName].push(colorSchedule);
}

然后该方法的结果将类似于

{
  "Red": [
    {
      "color": "#...",
      "team": {
        "name": "Red",
        "color": "#...",
        "due_date": "12-12-2018",
        "yards": []
      }
    }
  ]
}

哪个让您更容易看到每个时间表的颜色?我不确定这是否是您正在寻找的,因为颜色和团队名称已经可以访问而无需运行您的方法。

function setGroupedSchedules() {
    let groups = {};
    let schedules = [{team: {name: 'Red', color: '#...', due_date: '12-12-2018', yards: []}}];

    for(let schedule of schedules) {
      let teamName = (schedule.team ? schedule.team.name : 'Unassigned');
      let teamColor = (schedule.team ? schedule.team.color : 'Unassigned');
      groups[teamName] = !groups[teamName] ? [] : groups[teamName];
      colorSchedule = {color: teamColor, team: schedule.team};
      groups[teamName].push(colorSchedule);
    }
    return groups;
}

  console.log(setGroupedSchedules())


推荐阅读