React 中使用 map 构建行列转置的动态表格(按类别聚合多日期数据)
发布时间 - 2026-01-06 00:00:00 点击率:次本文介绍如何将嵌套 json 数据(按日期分组、每组含多类别)通过 react 的 map 方法重构为“类别为行、日期为列”的标准表格,解决原始渲染导致重复行的问题。
在 React 中渲染结构化表格时,若原始数据按时间维度嵌套(如每个日期对象包含多个类别子项),直接双层 map 会生成「日期 × 类别」的笛卡尔积式行结构,导致同一类别重复出现——这正是问题中表格错位的根本原因。要实现「类别为行、日期为列」的转置效果,关键在于先归一化数据,再按类别聚合跨日期值。
✅ 正确的数据预处理流程
首先,将 category_evolution 扁平化为单一数据流,再按 category 分组构建映射表:
// 1. 合并所有日期下的 data 数组
const flatData = category_evolution.flatMap(item => item.data);
// 2. 按 category 归组:{ "Criptomoedas": [...], "REITs": [...], ... }
const categoryMap = flatData.reduce((acc, item) => {
const { category } = item;
if (!acc[category]) acc[category] = [];
acc[category].push(item);
return acc;
}, {});? 推荐使用 flatMap 替代 reduce(...concat),语义更清晰;reduce 初始化为空对象 {},确保类型安全。
✅ 渲染转置表格(JSX)
表头保持原逻辑(日期列),但
需遍历 categoryMap 的每个键(即唯一类别),并在每行中按日期顺序取对应值:| Categoria | {category_evolution.map(({ name }) => ({name} | ))}
|---|---|
| {category} | {/* 按 c{match ? match.category_total_brl : '-'} | ); })}
⚠️ 注意事项与健壮性增强
- 日期顺序一致性:category_evolution 的原始顺序决定了表头和数据列的对应关系,务必确保 item.date 字段与 name 完全一致(如 "01/02/2025"),否则 find() 将返回 undefined。
- 空值容错:使用 match ? ... : '-' 防止某类别在某日期缺失时渲染 undefined。
-
性能优化:若数据量大,可提前构建 dateToIndex 映射,将 find() 改为 O(1) 查找:
const dateIndex = Object.fromEntries( category_evolution.map((item, i) => [item.name, i]) ); // 然后 entries[dateIndex[name]] 即可直接索引
-
可扩展性:如需支持 USD 列,只需复制
并替换 category_total_usd 字段即可。 通过这种「先归一、再分组、最后按序取值」的模式,你不仅能精准实现目标表格结构,还能轻松适配新增日期或类别,真正让 map 成为动态表格的可靠引擎。
# react
# js
# json
# go
# red
# date
# map
# undefined
# 对象
# tbody
# td
# 性能优化
# 重构
# 笛卡尔
# 再按
# 按日
# 多个
# 还能
# 遍历
# 只需
# 推荐使用
# 并在
# 你不
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现API版本控制_Laravel版本化API设计方案
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
Laravel如何自定义错误页面(404, 500)?(代码示例)
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
如何挑选高效建站主机与优质域名?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
SQL查询语句优化的实用方法总结
javascript日期怎么处理_如何格式化输出
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
如何快速搭建高效可靠的建站解决方案?
如何快速搭建安全的FTP站点?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
大连网站制作公司哪家好一点,大连买房网站哪个好?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
bootstrap日历插件datetimepicker使用方法
如何确认建站备案号应放置的具体位置?
网站图片在线制作软件,怎么在图片上做链接?
javascript中闭包概念与用法深入理解
浅述节点的创建及常见功能的实现
什么是javascript作用域_全局和局部作用域有什么区别?
Laravel怎么调用外部API_Laravel Http Client客户端使用
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
高性能网站服务器配置指南:安全稳定与高效建站核心方案
Android自定义控件实现温度旋转按钮效果
Laravel观察者模式如何使用_Laravel Model Observer配置
WordPress 子目录安装中正确处理脚本路径的完整指南
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何快速搭建高效WAP手机网站吸引移动用户?
Python并发异常传播_错误处理解析【教程】
如何在万网自助建站平台快速创建网站?
linux top下的 minerd 木马清除方法
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
html如何与html链接_实现多个HTML页面互相链接【互相】
Laravel怎么在Blade中安全地输出原始HTML内容
Laravel如何使用Vite进行前端资源打包?(配置示例)
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
魔方云NAT建站如何实现端口转发?
潮流网站制作头像软件下载,适合母子的网名有哪些?
Laravel如何使用Blade组件和插槽?(Component代码示例)
Laravel模型事件有哪些_Laravel Model Event生命周期详解
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
制作旅游网站html,怎样注册旅游网站?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
JavaScript如何实现类型判断_typeof和instanceof有什么区别
Python企业级消息系统教程_KafkaRabbitMQ高并发应用


ategory_evolution 原始顺序匹配日期,避免错位 */}
{category_evolution.map(({ name }) => {
const match = entries.find(item => item.date === name);
return (