AngularJs的命令在一片深深的田野旁

AngularJs orderBy a deep field?

本文关键字:一片 深深 田野 命令 AngularJs      更新时间:2023-09-26

所以,我的问题有两个部分,但首先,这里是我正在处理的示例数据:

    var candidates = [{
        "candidateId": 1,
        "firstName": "John",
        "lastName": "Smith",
        "email": "Smith@example.com",
        "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": "Doe@example.com",
        "tasks": [{"taskId":1, "taskState": 3},
                  {"taskId":2, "taskState": 3},
                  {"taskId":3, "taskState": 2},
                  {"taskId":4, "taskState": 3},
                  {"taskId":5, "taskState": 3}]
        }];

第一部分是:我想按已完成任务的最高数量排序(例如,3表示已完成)。整天都在努力寻找解决方案,但没有成功。(尝试通过在将对象附加到scope/vm之前添加numOfCompletedTasks属性来扩充对象,以及其他尝试)

问题的第二部分是:我开始怀疑这是否是前端的任务,我的意思是,如果我有1000条记录,我必须循环通过,并获得已完成任务的数量,这不是后端任务吗(这里的最佳实践是什么)

对于第一部分,您看起来像这样?

$scope.candidates = [
    {
      "candidateId": 1,
      "firstName": "John",
      "lastName": "Smith",
      "email": "Smith@example.com",
      "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": "Doe@example.com",
      "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");

第二:但我仍然相信,在后端做这件事会更明智。