【问题标题】:Create a function to transform an array of data into column headers for a table dynamically创建一个函数以将数据数组动态转换为表的列标题
【发布时间】:2021-11-05 21:11:46
【问题描述】:

我想要做的是获取对象的数据数组并创建一个函数,我可以在其中传递数据并动态呈现列标题和行。这是我的示例数据:

 let revisions = [
        {
          car: {
            id: 1000,
            header: "Toyota"
          },
          revisionDate: {
            header: "Revision Date",
            newValue: "08/24/2021",
            oldValue: "09/15/2020"
          },
          revisionType: {
            header: "Revision Type",
            newValue: "Tool Desc.",
            oldValue: "Tool Number"
          },
          revisionNote: {
            header: "Revision Note",
            newValue: "Delete",
            oldValue: "Delete"
          },
          workStation: {
            header: "Garage",
            newValue: "New garage",
            oldValue: "Old garage"
          }
        }

对于我的函数,我尝试使用 2 个 for 循环,但是我似乎无法弄清楚如何获取数组中的属性。我试过的:

getHeaders(revisions) {
    var prop;
    var rowProp;
    for (rowProp = 0; rowProp < revisions.length; rowProp++)
      if (rowProp >= 0) {
        gridData.push({ header: revisions.header });
      }
    for (prop = 0; prop < revisions.length; prop++) {
      if (prop === "oldValue") {
        gridData.push({ field: "revisionDate", header: revisions.header + " (Existing)" });
      }
      if (prop === "newValue") {
        gridData.push({ field: "revisionDateNew", header: revisions.header + " (New)" });
      }
      else {
        gridData.push(revisions);
      }
    }
    return gridData;
  }

这是html以防万一:

      <tr>
        <th *ngFor="let col of columns">
          {{col.header}}
        </th>
      </tr>

感谢您的帮助。

【问题讨论】:

  • 看起来你的数组包含一个项目,一个对象,它包含几个对象。因此 revisions.length 为 1 并且不包含您所期望的任何对象。使用。
  • 对不起,我不够具体,数组是我的模拟 api 数据,实际上有 10 个项目,但最终会被替换为一个 api。

标签: javascript angular typescript foreach dynamic-arrays


【解决方案1】:

如果你的对象保持不变:

{
 car:{...},
 revisionDate:{...},
 revisionType:{...},
 revisionNote:{...},
 workStation:{...}
}

那么您甚至不需要构建一个函数来在表格中显示该数据,这是您可以做的表格布局:

 <table>
  <th class="row" >
    <div class="col-2">{{ revisions[0].car.header }}</div>
    <div class="col-2">{{ revisions[0].revisionDate.header }}</div>
    <div class="col-2">{{ revisions[0].revisionType.header }}</div>
    <div class="col-2">{{ revisions[0].revisionNote.header }}</div>
    <div class="col-2">{{ revisions[0].workStation.header }}</div>
  </th>
  <td class="row" *ngFor="let rev of revisions">
    <div class="col-2">{{ rev.car.id }}</div>
    <div class="col-2">{{ rev.revisionDate.newValue }}</div>
    <div class="col-2">{{ rev.revisionType.newValue }}</div>
    <div class="col-2">{{ rev.revisionNote.newValue }}</div>
    <div class="col-2">{{ rev.workStation.newValue }}</div>
  </td>
</table>

revisions[0] 用于获取第一个对象并访问标题以进行显示。然后,您使用 *ngFor="" 循环遍历每个对象并显示这些元素中的数据。

【讨论】:

  • 谢谢,假设数据确实发生了变化,例如将来从 api 获取数据,有没有办法创建函数来处理它?
  • 如果您正在创建您的 api,我建议您可能重构您设置数据的方式。它的布局方式有点令人困惑。也许有一个 getHeaders 端点和一个 getData 端点然后从那里开始,然后只显示标题会更简单。
猜你喜欢
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-07
  • 1970-01-01
  • 1970-01-01
  • 2014-10-18
相关资源
最近更新 更多