Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在分组表中显示数组_Javascript_Angularjs_Html Table - Fatal编程技术网

Javascript 在分组表中显示数组

Javascript 在分组表中显示数组,javascript,angularjs,html-table,Javascript,Angularjs,Html Table,我有一个JSON数组,如下所示: Array = [{"type":"x", "name":"a1"}, {"type":"x", "name":"a2"}, {"type":"y", "name":"a3"}, {"type":"y", "name":"a4"}] 现在,我想在一张表格中显示它,使用角度,所以它采用以下形式: x a1 a2 y a3 a4 该表显示了类型,然后是所有具有该类型的项的名称。首先,wild man@Mor

我有一个JSON数组,如下所示:

Array = [{"type":"x", "name":"a1"}, 
         {"type":"x", "name":"a2"},
         {"type":"y", "name":"a3"},
         {"type":"y", "name":"a4"}]
现在,我想在一张表格中显示它,使用角度,所以它采用以下形式:

x
a1
a2
y
a3
a4

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

首先,wild man@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>

{{value}}

有关更多详细信息,请参见

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


如果您处理的是大型数据集,不能更改对象的性能结构,那么您可能需要考虑编写一个角度自定义指令。 哎呀。安定下来。你有固定的和少量的(2-3)类型吗?然后您可以创建N个表,其中包含按类型筛选的

ng repeat
。否则,我建议将数组更改为适合显示方式的结构。它被称为“视图模型”是有原因的——它应该为视图建模。你做了什么?分享您的解决方案(不一定有效),以便我们改进它。