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

React中过滤与转换表格数据:合并关联参数的实现

React组件数据处理解决方案

核心数据处理函数

先实现一个专门处理数据的函数,完成过滤与参数合并逻辑:

function processProgramData(programData) {
  // 第一步:过滤出ParameterMenu为'MON'的数据项
  const filteredData = programData.filter(item => item.ParameterMenu === 'MON');
  
  // 创建参数映射表,方便快速查找对应上下限参数
  const paramMap = new Map();
  filteredData.forEach(item => {
    paramMap.set(item.ParameterName, item);
  });
  
  // 第二步:合并关联参数
  const processedData = [];
  filteredData.forEach(item => {
    // 只处理主参数(排除Upper/Lower结尾的项)
    if (!item.ParameterName.endsWith('Upper') && !item.ParameterName.endsWith('Lower')) {
      const paramName = item.ParameterName;
      const upperParam = paramMap.get(`${paramName}Upper`);
      const lowerParam = paramMap.get(`${paramName}Lower`);
      
      processedData.push({
        ...item,
        toleranceUpper: upperParam ? upperParam.Value : null,
        toleranceLower: lowerParam ? lowerParam.Value : null
      });
    }
  });
  
  return processedData;
}

逻辑说明

  • 过滤阶段:用数组filter方法筛选符合条件的项,只保留ParameterMenu等于'MON'的数据。
  • 映射表创建:用Map存储所有过滤后的参数,键为ParameterName,查找上下限参数的时间复杂度为O(1),提升处理效率。
  • 参数合并:遍历过滤后的项,仅处理非上下限结尾的主参数,通过映射表快速匹配对应的XUpper和XLower,将它们的Value赋值给新字段toleranceUpper和toleranceLower,找不到对应项则设为null。

整合到React组件

将处理函数结合useMemo(避免重复计算)整合到组件中,示例代码如下:

import { useMemo } from 'react';

const DataTable = ({ programData }) => {
  // 用useMemo缓存处理后的数据,仅当programData变化时重新计算
  const processedData = useMemo(() => {
    return processProgramData(programData);
  }, [programData]);

  return (
    <table>
      <thead>
        <tr>
          <th>参数名称</th>
          <th>参数值</th>
          <th>上限公差</th>
          <th>下限公差</th>
          {/* 其他表头字段可按需添加 */}
        </tr>
      </thead>
      <tbody>
        {processedData.map((item, index) => (
          <tr key={index}>
            <td>{item.ParameterName}</td>
            <td>{item.Value}</td>
            <td>{item.toleranceUpper ?? '-'}</td>
            <td>{item.toleranceLower ?? '-'}</td>
            {/* 其他表格字段可按需添加 */}
          </tr>
        ))}
      </tbody>
    </table>
  );
};

export default DataTable;

示例验证

输入示例ProgramData

const sampleProgramData = [
  { ParameterMenu: 'MON', ParameterName: 'Temperature', Value: 25 },
  { ParameterMenu: 'MON', ParameterName: 'TemperatureUpper', Value: 30 },
  { ParameterMenu: 'MON', ParameterName: 'TemperatureLower', Value: 20 },
  { ParameterMenu: 'MON', ParameterName: 'Pressure', Value: 101 },
  { ParameterMenu: 'OTHER', ParameterName: 'Humidity', Value: 60 },
  { ParameterMenu: 'MON', ParameterName: 'PressureUpper', Value: 105 }
];

处理后输出

[
  {
    ParameterMenu: 'MON',
    ParameterName: 'Temperature',
    Value: 25,
    toleranceUpper: 30,
    toleranceLower: 20
  },
  {
    ParameterMenu: 'MON',
    ParameterName: 'Pressure',
    Value: 101,
    toleranceUpper: 105,
    toleranceLower: null
  }
]

内容的提问来源于stack exchange,提问作者said al hendi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:34:59