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

如何编写函数将对象数组动态转换为表格列头并实现渲染

动态渲染表格实现方案

核心逻辑说明

你提供的数据结构分为两类字段:仅展示固定值的字段(如car)、同时展示新旧两个值的变更字段(如revisionDate),我们可以先统一生成列头配置,再对应生成行数据。

TS 逻辑代码

// 生成表格列头配置
getColumns(revisions: any[]): any[] {
  if (!revisions?.length) return [];
  const columns = [];
  // 取第一条数据的所有属性作为列的依据(默认所有行结构一致)
  const firstRow = revisions[0];
  Object.keys(firstRow).forEach(fieldKey => {
    const fieldConfig = firstRow[fieldKey];
    // 区分带新旧值的变更字段和普通字段
    if (fieldConfig.hasOwnProperty('oldValue') && fieldConfig.hasOwnProperty('newValue')) {
      // 旧值列
      columns.push({
        field: `${fieldKey}_old`,
        header: `${fieldConfig.header} (现有)`
      });
      // 新值列
      columns.push({
        field: `${fieldKey}_new`,
        header: `${fieldConfig.header} (新)`
      });
    } else {
      // 普通字段单列
      columns.push({
        field: fieldKey,
        header: fieldConfig.header
      });
    }
  });
  return columns;
}

// 生成表格行数据
getTableRows(revisions: any[]): any[] {
  if (!revisions?.length) return [];
  return revisions.map(row => {
    const processedRow = {};
    Object.keys(row).forEach(fieldKey => {
      const fieldConfig = row[fieldKey];
      if (fieldConfig.hasOwnProperty('oldValue') && fieldConfig.hasOwnProperty('newValue')) {
        processedRow[`${fieldKey}_old`] = fieldConfig.oldValue;
        processedRow[`${fieldKey}_new`] = fieldConfig.newValue;
      } else {
        processedRow[fieldKey] = fieldConfig.header;
      }
    });
    return processedRow;
  });
}

Angular 模板代码

<table>
  <thead>
    <tr>
      <th *ngFor="let col of columns">
        {{col.header}}
      </th>
    </tr>
  </thead>
  <tbody>
    <tr *ngFor="let row of tableRows">
      <td *ngFor="let col of columns">
        {{row[col.field]}}
      </td>
    </tr>
  </tbody>
</table>

调用示例

在组件获取到revisions数据后,直接调用两个方法生成对应配置即可:

columns = [];
tableRows = [];

ngOnInit() {
  // 假设你已经获取到revisions数据
  this.columns = this.getColumns(this.revisions);
  this.tableRows = this.getTableRows(this.revisions);
}

内容的提问来源于stack exchange,提问作者Garrett Liebman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:06:02