【问题标题】:Showing an array in a grouped table在分组表中显示数组
【发布时间】:2015-05-02 12:15:14
【问题描述】:

我有一个这样的 JSON 数组:

Array = [{"type":"x", "name":"a1"}, 
         {"type":"x", "name":"a2"},
         {"type":"y", "name":"a3"},
         {"type":"y", "name":"a4"}]

现在,我想使用 Angular 将它显示在一个表格中,以便它采用这种形式:

x
a1
a2
y
a3
a4

该表显示类型,然后是具有该类型的所有项目的名称。

【问题讨论】:

  • 哎呀。安顿下来。
  • 您有固定的少量 (2-3) 类型吗?然后您可以创建 N 个表,其中 ng-repeat 按类型过滤。否则,我建议将您的数组更改为适合您显示方式的结构。它被称为“视图模型”是有原因的——它应该为视图建模。
  • 你做了什么?分享您的解决方案(不一定有效),以便我们改进它。

标签: javascript angularjs html-table


【解决方案1】:

首先,野人@Morre 是正确的(尽管对他的正确性有点兴奋)你所拥有的不是 JSON 数组而是对象数组。但除了语义......

虽然我相信有一种更优雅的方式可以解决您的问题,但这里有一个可能的解决方案

// Given your array
var myArray = [{ 
    "type": "x",
    "name": "a1"
}, {
    "type": "x",
    "name": "a2"
}, {
    "type": "y",
    "name": "a3"
}, {
    "type": "y",
    "name": "a4"
}];

// create a new object structured like this
// {'x': ['a1', 'a2'], 'y': ['a2', 'a3']}
// while creating a new array that's structured like this
// ['x', 'a1', 'a2', 'y', 'a2', 'a3']
var newObj = {};
$scope.newArray = [];
myArray.map(function(obj) { 
    if (!newObj[obj.type]) {
        newObj[obj.type] = [obj.name];
        $scope.newArray.push(obj.type);
        $scope.newArray.push(obj.name);
    } else {
        newObj[obj.type].push(obj.name);
        $scope.newArray.push(obj.name);
    }
});

你的ng-repeat 可能看起来像这样

<tr ng-repeat="value in newArray">
    <td>{{ value }}</td>
</tr>

详情请见JSFiddle

【讨论】:

    【解决方案2】:

    您可以使用 ngrepeat,但是您需要更改对象结构,使“type”成为“name”的父级:var obj = {type: 'x', names: [{name:'a1'}, {name:'a2'}]}

    如果您正在处理大型数据集并且无法更改对象的结构以提高性能,您可能需要考虑编写一个角度自定义指令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 2015-01-02
      • 2012-11-29
      • 2020-01-16
      • 2016-11-25
      • 2015-07-24
      • 1970-01-01
      相关资源
      最近更新 更多