Angularjs 按角度对多维JSON排序

Angularjs 按角度对多维JSON排序,angularjs,sorting,ng-repeat,Angularjs,Sorting,Ng Repeat,我从数据库中获取JSON,其结构如下: "data": [ { "category": "1", "description": "hello" } ] Category 1 .... .... .... Category 3 .... .... $scope.hello = []; angular.forEach(data.data, function(value, key) { $scope.hello.push(value.ca

我从数据库中获取JSON,其结构如下:

  "data": [
    {
      "category": "1",
      "description": "hello"
      }
   ]
Category 1
....
....
....

Category 3
....
....
$scope.hello = [];
angular.forEach(data.data, function(value, key) {
  $scope.hello.push(value.category+" "+value.description)
}
description
category
都是动态的,因此我可以有5个对象具有
category:1
和2个对象具有
category:3
等。或者我可以有3个对象具有
category:20
和25个对象具有
category:8

我想创建如下HTML元素:

  "data": [
    {
      "category": "1",
      "description": "hello"
      }
   ]
Category 1
....
....
....

Category 3
....
....
$scope.hello = [];
angular.forEach(data.data, function(value, key) {
  $scope.hello.push(value.category+" "+value.description)
}
我可以创建如下字符串:

  "data": [
    {
      "category": "1",
      "description": "hello"
      }
   ]
Category 1
....
....
....

Category 3
....
....
$scope.hello = [];
angular.forEach(data.data, function(value, key) {
  $scope.hello.push(value.category+" "+value.description)
}
以便输出:

Category 1 hello
Category 1 hi
Category 1 bye
Category 3 sup
Category 3 yo
但我将如何将其转化为:

Category 1
hello 
hi
bye

Category 3
sup
yo
javascript提供了一个函数。在此函数中,我将按两个属性对场地对象数组进行排序;姓名和地区

    function sort(col, direction) {
        switch (col) {
            case "region":
            {
                sites.sort(function(s1, s2) {
                    var r = 0;
                    if (s1.region < s2.region)
                        r = -1;
                    else if (s1.region > s2.region)
                        r = 1;
                    else {
                        if (s1.name < s2.name)
                            r = -1;
                        else if (s1.name > s2.name)
                            r = 1;
                    }
                    return r;
                });
                break;
            }
            default:
            {
                sites.sort(function(s1, s2) {
                    var r = 0;
                    if (s1.name < s2.name)
                        r = -1;
                    else if (s1.name > s2.name)
                        r = 1;
                    else {
                        if (s1.region < s2.region)
                            r = -1;
                        else if (s1.region > s2.region)
                            r = 1;
                    }
                    return r;
                });
            }
        }
        if (direction === "desc") {
            this.sites.reverse();
        }
    }
函数排序(列、方向){
开关(col){
案例“区域”:
{
站点。排序(功能(s1、s2){
var r=0;
if(s1.区域s2.区域)
r=1;
否则{
if(s1.names2.name)
r=1;
}
返回r;
});
打破
}
违约:
{
站点。排序(功能(s1、s2){
var r=0;
if(s1.names2.name)
r=1;
否则{
if(s1.区域s2.区域)
r=1;
}
返回r;
});
}
}
如果(方向==“描述”){
this.sites.reverse();
}
}
javascript提供了一个函数。在此函数中,我将按两个属性对场地对象数组进行排序;姓名和地区

    function sort(col, direction) {
        switch (col) {
            case "region":
            {
                sites.sort(function(s1, s2) {
                    var r = 0;
                    if (s1.region < s2.region)
                        r = -1;
                    else if (s1.region > s2.region)
                        r = 1;
                    else {
                        if (s1.name < s2.name)
                            r = -1;
                        else if (s1.name > s2.name)
                            r = 1;
                    }
                    return r;
                });
                break;
            }
            default:
            {
                sites.sort(function(s1, s2) {
                    var r = 0;
                    if (s1.name < s2.name)
                        r = -1;
                    else if (s1.name > s2.name)
                        r = 1;
                    else {
                        if (s1.region < s2.region)
                            r = -1;
                        else if (s1.region > s2.region)
                            r = 1;
                    }
                    return r;
                });
            }
        }
        if (direction === "desc") {
            this.sites.reverse();
        }
    }
函数排序(列、方向){
开关(col){
案例“区域”:
{
站点。排序(功能(s1、s2){
var r=0;
if(s1.区域s2.区域)
r=1;
否则{
if(s1.names2.name)
r=1;
}
返回r;
});
打破
}
违约:
{
站点。排序(功能(s1、s2){
var r=0;
if(s1.names2.name)
r=1;
否则{
if(s1.区域s2.区域)
r=1;
}
返回r;
});
}
}
如果(方向==“描述”){
this.sites.reverse();
}
}

使用angular.filter模块的groupBy了解更多信息,请参阅此答案

var-app=angular.module(“app”,['angular.filter']))
app.controller('ctrl',['$scope',函数($scope){
$scope.data=[
{
“类别”:“1”,
“说明”:“你好”
},
{
“类别”:“1”,
“说明”:“嗨”
},
{
“类别”:“3”,
“说明”:“海”
},
{
“类别”:“1”,
“说明”:“你好”
},
{
“类别”:“3”,
“说明”:“你好”
},
{
“类别”:“1”,
“说明”:“海”
}
]
}]);

    类别:{{key}}
  • {{d.description}}

使用angular.filter模块的groupBy了解更多信息,请参阅此答案

var-app=angular.module(“app”,['angular.filter']))
app.controller('ctrl',['$scope',函数($scope){
$scope.data=[
{
“类别”:“1”,
“说明”:“你好”
},
{
“类别”:“1”,
“说明”:“嗨”
},
{
“类别”:“3”,
“说明”:“海”
},
{
“类别”:“1”,
“说明”:“你好”
},
{
“类别”:“3”,
“说明”:“你好”
},
{
“类别”:“1”,
“说明”:“海”
}
]
}]);

    类别:{{key}}
  • {{d.description}}

您应该尝试在服务器端对记录进行分组,我的意思是从哪里获得JSON数组。在客户端,只需循环和显示。这是最好的实践,也是优化的方法,您应该尝试在服务器端对记录进行分组,我的意思是从哪里获得JSON数组。在客户端,只需循环和显示。这是最佳实践,也是优化的wayWait,