首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按嵌套字段使用Astro排序

按嵌套字段使用Astro排序
EN

Stack Overflow用户
提问于 2022-10-12 22:37:39
回答 1查看 30关注 0票数 0

给定下面的JSON响应,我将如何首先根据团队,然后按年,使用javascript和/或jsx来映射响应?我在用阿童木。

代码语言:javascript
复制
{
  "data": [
    {
      "id": 1,
      "team_name": "Team One",
      "players": [
        {
          "player_name": "Mickey Mantle",
          "players_year": {
            "year": 2024
          }
        },
        {
          "player_name": "Larry Smalls",
          "players_year": {
            "year": 2022
          }
        },
        {
          "player_name": "Ron Davis",
          "players_year": {
            "year": 2024
          }
        }
      ]
    },
    {
      "id": 2,
      "team_name": "Team Two",
      "players": [
        {
          "player_name": "Jim Abbot",
          "players_year": {
            "year": 2022
          }
        }
      ]
    }
  ]
}

最终结果- HTML输出应该与以下内容相匹配:

代码语言:javascript
复制
<div class="group">
  <h2>Team One</h2>
  <h3>2022</h3>
  <ul>
    <li>Larry Smalls</li>
  </ul>

  <h3>2024</h3>
  <ul>
    <li>Mickey Mantle</li>
    <li>Ron Davis</li>
  </ul>
</div>

<div class="group">
  <h2>Team Two</h2>
  <h3>2022</h3>
  <ul>
    <li>Jim Abbot</li>
  </ul>
</div>

目前,这是我的文件,它可以工作,但没有分组,如上图所示。在Astro的前端和页面正文中需要哪些额外的javascript?

teams.astro

代码语言:javascript
复制
---
const directus = await getDirectusClient()

const response = await directus.items("teams").readByQuery({
    fields: [
        "id",
        "team_name",
        "players.player_name",
        "players.players_year.year",
    ],
})

const formattedResponse = response.data.map((team) => {
    return {
        ...team,
        yearsArr: team.players.map(player => player.players_year.year)
    }
})

const [...teams] = formattedResponse
---
代码语言:javascript
复制
<h1>Teams Page</h1>
{
  teams.map((team) => {
    return (
      <div class='group'>
        <h2>{team.team_name}</h2>
        <ul>
          {team.players.map((player) => (
            <li>
              {player.player_name} ({player.players_year.year})
            </li>
          ))}
        </ul>
      </div>
    )
  })
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-12 22:48:54

这个问题已经问过很多次了。但不完全是这样。

Update:添加了html标记(用于天文)。

代码语言:javascript
复制
var obj = {data:[{id:1,team_name:"Team One",players:[{player_name:"Mickey Mantle",players_year:{year:2024}},{player_name:"Larry Smalls",players_year:{year:2022}},{player_name:"Ron Davis",players_year:{year:2024}}]},{id:2,team_name:"Team Two",players:[{player_name:"Jim Abbot",players_year:{year:2022}}]}]};

var result = {};
obj.data.forEach(function(item) {
  result[item.team_name] = result[item.team_name] || {}
  item.players.forEach(function(player) {
    result[item.team_name][player.players_year.year] = result[item.team_name][player.players_year.year] || [];
    result[item.team_name][player.players_year.year].push(player.player_name);
  })
})
console.log(result)
代码语言:javascript
复制
.as-console-wrapper {
  max-height: 100% !important
}
代码语言:javascript
复制
<h1>Teams Page</h1>
{Object.entries(result).map(([team_name, team]) => { return (
<div class='group'>
    <h2>{team_name}</h2>

    {Object.entries(team).map(([year, players]) => (
    <h3>{year}</h3>
    <ul>
        {players.map(player_name) => (
        <li>
            {player_name}
        </li>
        )}
    </ul>
    ))}

</div>
) }) }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74048657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档