You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React如何根据div id/key匹配航班数据,在对应容器内动态渲染组件

实现方案

第一步:预处理航班数据,统一格式并构建时间映射

首先把原始数据里的时间格式统一(把冒号替换成点,避免0:00和0.00格式不匹配的问题),同时按「时间-起降类型-对应机场列表」的结构构建索引,方便后续快速查找对应时间的航班:

// 原始数据
const rawData = {
    "AirplaneData": {
      "Arrivals":[
        {"BIO": "0:00"}, 
        {"VGU": "2.00"}, 
        {"MEX": "4.00"}],
      "Departures": [
        {"BIO": "3:00"}, 
        {"VGU": "4.00"}, 
        {"MEX": "6.00"}]
      
    }
  }

// 构建时间-航班映射表
const timeFlightMap = {}
// 处理到达航班
rawData.AirplaneData.Arrivals.forEach(flight => {
  const airport = Object.keys(flight)[0]
  // 统一时间格式,把冒号替换为点
  const time = flight[airport].replace(':', '.')
  if(!timeFlightMap[time]) timeFlightMap[time] = {Arrivals: [], Departures: []}
  timeFlightMap[time].Arrivals.push(airport)
})
// 处理出发航班,逻辑同上
rawData.AirplaneData.Departures.forEach(flight => {
  const airport = Object.keys(flight)[0]
  const time = flight[airport].replace(':', '.')
  if(!timeFlightMap[time]) timeFlightMap[time] = {Arrivals: [], Departures: []}
  timeFlightMap[time].Departures.push(airport)
})

第二步:循环生成全天小时级DOM,绑定时间作为key

不需要手动编写每小时的重复DOM,直接循环生成0-23小时对应的容器,直接把规范化后的时间作为div的key,同时和前面的映射表匹配渲染对应内容:

<div className={classes.bars}>
  {/* 循环生成全天24小时对应的模块 */}
  {Array.from({length:24}, (_,i)=>{
    // 生成和标签格式一致的时间字符串,比如0.00、1.00
    const timeStr = `${i}.00`
    // 读取当前时间对应的航班数据,无数据则默认为空
    const currentFlights = timeFlightMap[timeStr] || {Arrivals: [], Departures: []}
    return (
      <div className={classes.graph} key={timeStr}>
        {/* 上方柱状块渲染到达航班 */}
        <div className={classes.bar}>
          {currentFlights.Arrivals.map(airport => <span key={airport}>{airport} 到达</span>)}
        </div>
        {/* 时间标签 */}
        <div className={classes[`label${i}`]}><span style={{marginLeft: "10px"}}>{timeStr}</span></div>
        {/* 下方柱状块渲染出发航班 */}
        <div className={classes.bar}>
          {currentFlights.Departures.map(airport => <span key={airport}>{airport} 出发</span>)}
        </div>
      </div>
    )
  })}
</div>

核心逻辑说明

  • 提前把航班数据按时间做索引,避免每次渲染都遍历全量航班数据,查找效率更高
  • 所有时间统一格式后作为key,既保证key唯一,又能直接和航班数据的时间做精准匹配
  • 循环生成24小时的容器,不用手动重复写DOM代码,后续维护也更方便

内容的提问来源于stack exchange,提问作者Ap-Mich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:18:02