2016-03-22 2 views
1

Итак, мой вопрос имеет 2 части, но первая, вот образец данных я работаю:AngularJs orderBy глубокое поле?

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}] 
     }]; 

Первая часть: Я хочу, чтобы отсортировать/OrderBy наивысший номер завершен ряд задач, (скажем, 3 средства завершены). в течение всего дня пытался найти решение без везения. (Пыталась увеличением объектов пути добавления numOfCompletedTasks свойства перед присоединением их к объему/VM среди других попыток)

вторая часть вопроса: я начал интересно, если это даже задача для передняя- конец, я имею в виду, что, если бы у меня было 1000 записей, которые мне нужно пропустить и получить количество завершенных задач, это не основная задача (что здесь лучше всего)

+1

Вы должны сортировать данные на бэкэнд, что является наилучшей практикой, на мой взгляд. Кроме того, вы никогда не знаете, какой клиент может открыть ваше приложение. Лучше делать обработки на backend –

+0

Создание настраиваемого фильтра, который сортирует ваш массив, должен это сделать – Konkko

ответ

1

Для в первой части вы смотрите что-то вроде этого?

$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"); 

второй: Но я до сих пор считаю, что было бы разумнее сделать это на заднем конце.

Смежные вопросы