2016-03-22 10 views
1

So hat meine Frage 2 Teile, aber zuerst ist hier die Beispieldaten an dem ich arbeite:AngularJs orderBy ein tiefes Feld?

var candidates = [{ 
     "candidateId": 1, 
     "firstName": "John", 
     "lastName": "Smith", 
     "email": "[email protected]", 
     "tasks": [{"taskId":1, "taskState": 3}, 
        {"taskId":2, "taskState": 3}, 
        {"taskId":3, "taskState": 3}, 
        {"taskId":4, "taskState": 1}, 
        {"taskId":5, "taskState": 2}] 
     }, 
     { 
     "candidateId": 2, 
     "firstName": "John", 
     "lastName": "Doe", 
     "email": "[email protected]", 
     "tasks": [{"taskId":1, "taskState": 3}, 
        {"taskId":2, "taskState": 3}, 
        {"taskId":3, "taskState": 2}, 
        {"taskId":4, "taskState": 3}, 
        {"taskId":5, "taskState": 3}] 
     }]; 

Der erste Teil ist: ich sortieren möchten/orderBy die höchste Zahl erledigten Aufgaben Nummer (sagen, 3 bedeutet abgeschlossen). Ich habe den ganzen Tag versucht, eine Lösung ohne Glück zu finden. (Versucht, die Objekte Vermehrung durch eine numOfCompletedTasks Eigenschaft hinzufügen, bevor sie auf den Umfang/vm unter anderem Versuche befestigen)

der zweite Teil der Frage ist: Ich begann diese zu fragen, ob noch eine Aufgabe für die front- Ende, ich meine, was ist, wenn ich einen Datensatz 1000 hatte, dass ich durchlaufen muss, und die Anzahl der abgeschlossenen Aufgaben zu erhalten, ist dies nicht eine Back-End-Aufgabe (was ist die beste Vorgehensweise hier)

+1

Sie sollten Daten im Backend sortieren, das ist die beste Praxis meiner Meinung nach. Außerdem weißt du nie, welche Art von Client deine App geöffnet hat. Bessere Verarbeitung im Backend –

+0

Erstellen Sie einen benutzerdefinierten Filter, der Ihr Array sortiert, sollte es tun – Konkko

Antwort

1

Für der erste Teil, den du so siehst?

$scope.candidates = [ 
    { 
     "candidateId": 1, 
     "firstName": "John", 
     "lastName": "Smith", 
     "email": "[email protected]", 
     "tasks": [{"taskId":1, "taskState": 3}, 
       {"taskId":2, "taskState": 3}, 
       {"taskId":3, "taskState": 3}, 
       {"taskId":4, "taskState": 1}, 
       {"taskId":5, "taskState": 2}] 
    }, 
    { 
     "candidateId": 2, 
     "firstName": "John", 
     "lastName": "Doe", 
     "email": "[email protected]", 
     "tasks": [{"taskId":1, "taskState": 3}, 
       {"taskId":2, "taskState": 3}, 
       {"taskId":3, "taskState": 2}, 
       {"taskId":4, "taskState": 3}, 
       {"taskId":5, "taskState": 3}] 
}]; 


function customSort(items, field ,value){ 
    var filtered = []; 
    angular.forEach(items, function(item) { 
     item.tasks.sort(function(a, b){ 
     return (a[value] < b[value] ? 1 : -1); 
     }); 
     filtered.push(item); 
    }); 
    var foo = {"taskState": 3}; 
    filtered.sort(function (a, b) { 
     return ($filter('filter')(a["tasks"], foo, "strict").length < $filter('filter')(b["tasks"], foo, "strict").length ? 1 : -1); 
    }); 
    return filtered; 
} 

$scope.candidates = customSort($scope.candidates, "taskState"); 

2.: Aber ich glaube immer noch, wäre es klüger, es auf dem Back-End zu tun.

Verwandte Themen