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

如何通过ng-repeat遍历嵌套数组生成指定格式表格行

解决AngularJS ng-repeat生成行式表格的问题

你遇到的问题是因为原数据结构是按列分组的,但你期望的是按行展示,所以需要调整遍历逻辑,先确定表格需要的总行数,再按行索引去匹配每列对应位置的元素。

步骤1:在控制器中预处理数据

首先我们需要获取所有列的标识,同时计算最长列的长度(也就是表格需要的总行数):

angular.module('myApp', [])
.controller('MainCtrl', function($scope) {
  $scope.data = {
    "1": [
      { "row": "1", "name": "Acc" },
      { "row": "1", "name": "Eco" },
      { "row": "1", "name": "Mono" },
      { "row": "1", "name": "Mini" }
    ],
    "2": [
      { "row": "2", "name": "Mono" },
      { "row": "2", "name": "Eco" }
    ]
  };

  // 获取所有列的键,用于生成表头和列遍历
  $scope.columnKeys = Object.keys($scope.data);
  
  // 计算表格总行数,取最长列的元素数量
  $scope.totalRows = $scope.columnKeys.reduce(function(maxCount, key) {
    return Math.max(maxCount, $scope.data[key].length);
  }, 0);
});

步骤2:编写HTML模板实现行式遍历

接下来在模板中,先遍历列键生成表头,再按行索引遍历生成每一行,每行内再遍历列键获取对应位置的元素:

<div ng-app="myApp" ng-controller="MainCtrl">
  <table border="1">
    <!-- 表头行 -->
    <tr>
      <th ng-repeat="key in columnKeys">{{key}}</th>
    </tr>
    <!-- 数据行:遍历行索引,从0到totalRows-1 -->
    <tr ng-repeat="row in [].constructor(totalRows) track by $index">
      <!-- 每个单元格:取对应列的第$index个元素的name,无元素则显示空 -->
      <td ng-repeat="key in columnKeys">
        {{ data[key][$index] ? data[key][$index].name : '' }}
      </td>
    </tr>
  </table>
</div>

关键逻辑说明

  • [].constructor(totalRows):生成一个长度为totalRows的空数组,用来让ng-repeat遍历指定次数的行。
  • track by $index:因为数组是空的,需要用索引来跟踪循环,避免Angular报错。
  • data[key][$index] ? data[key][$index].name : '':判断当前列的对应行是否有元素,有则显示name,没有则显示空单元格,兼容所有AngularJS版本。如果你的环境支持ES6+可选链,也可以写成data[key][$index]?.name || ''。

这样就能生成你期望的行式表格了~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:11:47