2016-03-24 9 views
0

ich JSON aus einer Datenbank und seine Struktur ist wie folgt:Sortieren mehrdimensionale JSON in Winkel

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

description und category sind dynamisch, so kann ich 5 Objekte mit category:1 und 2 mit category:3 etc. Oder Ich könnte 3 Objekte mit category:20 und 25 Objekte mit category:8 haben.

Ich möchte HTML-Elemente wie folgt erstellen:

Category 1 
.... 
.... 
.... 

Category 3 
.... 
.... 

ich eine Zeichenfolge wie folgt erstellen:

$scope.hello = []; 
angular.forEach(data.data, function(value, key) { 
    $scope.hello.push(value.category+" "+value.description) 
} 

so dass es folgende Ausgabe:

Category 1 hello 
Category 1 hi 
Category 1 bye 
Category 3 sup 
Category 3 yo 

Aber wie wende ich dies an:

Category 1 
hello 
hi 
bye 

Category 3 
sup 
yo 
+0

Sie sollten die Gruppierung der Aufzeichnung auf Server-Seite versuchen, meine ich, von wo aus Sie den JSON-Array bekommen. Und hier auf der Clientseite einfach Schleife und Anzeige. Das ist die beste Vorgehensweise und auch optimierter Weg. –

Antwort

1

Verwenden Sie groupby angular.filter Modul für weitere Informationen finden Sie in dieser Antwort. How can I group data with an Angular filter?

var app = angular.module("app",['angular.filter']) 
 
app.controller('ctrl',['$scope', function($scope){ 
 
     $scope.data = [ 
 
       { 
 
        "category": "1", 
 
        "description": "hello" 
 
       }, 
 
      { 
 
        "category": "1", 
 
        "description": "hi" 
 
       }, 
 
      { 
 
        "category": "3", 
 
        "description": "hai" 
 
       }, 
 
      { 
 
        "category": "1", 
 
        "description": "hello" 
 
       }, 
 
      { 
 
        "category": "3", 
 
        "description": "hello" 
 
       }, 
 
      { 
 
        "category": "1", 
 
        "description": "hai" 
 
       } 
 
    ] 
 
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script> 
 
<script src="//cdnjs.cloudflare.com/ajax/libs/angular-filter/0.4.7/angular-filter.js"></script> 
 
<div ng-app="app" ng-controller="ctrl"> 
 
<div class="item item-checkbox"> 
 
    <ul ng-repeat="(key, value) in data | groupBy: 'category'"> 
 
     category: {{ key }} 
 
     <li ng-repeat="d in value |orderBy:'description'"> 
 
      {{ d.description }} 
 
     </li> 
 
    </ul>  
 
</div>

+0

Warte, muss ich das Filtermodul wie folgt bekommen '' und dann diese in meiner App wie 'var app = angular.module (" app ", ['angular.filter'])'? – slevin

+0

ja. Sie müssen angular-filter.js nach angular lib injizieren. bitte, wenn diese Antwort dir hilft, es zu akzeptieren. danke –

+0

Sorry, ich kann den Filter für die 'groupBy' nicht installieren. Wie hast du es installiert, damit ich es funktionieren lassen kann? Danke – slevin

1

Javascript bietet eine sort Funktion. In dieser Funktion sortiere ich ein Array von Site-Objekten nach zwei Eigenschaften. Name und Region.

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(); 
     } 
    }