Javascript AngularJS中的API端点输出JSON过滤器

Javascript AngularJS中的API端点输出JSON过滤器,javascript,angularjs,json,Javascript,Angularjs,Json,我有一个端点API。有四个带有键的对象,id,组,名称和修改日期。我使用AngularJS 1调用API并打印输出。现在,几乎没有多个条目,group和name相同,但date\u modified不同 为了显示输出,我想以一种方式对其进行过滤,如果对象中的组和名称相同,则它将采用日期修改值最高的对象,并忽略其他对象 端点API JSON结构:- [ { "id": 1, "group": "AB", "name": "John",

我有一个端点API。有四个带有键的对象,
id
名称
修改日期
。我使用AngularJS 1调用API并打印输出。现在,几乎没有多个条目,
group
name
相同,但
date\u modified
不同

为了显示输出,我想以一种方式对其进行过滤,
如果对象中的组和名称相同,则它将采用日期修改值最高的对象,并忽略其他对象

端点API JSON结构:-

[
    {

        "id": 1,
        "group": "AB",
        "name": "John",
        "date_modified": "2018-01-30T12:01:47Z"

    },
    {

        "id": 2,
        "group": "BC",
        "name": "Alex",
        "date_modified": "2018-01-30T12:04:43Z"

    },
    {

        "id": 3,
        "group": "AB",
        "name": "John",
        "date_modified": "2018-01-29T12:00:02Z"

    },
    {

        "id": 4,
        "group": "CD",
        "name": "Peter",
        "date_modified": "2018-01-29T12:00:07Z"

    }
]
services.js:-

app.factory('Instlistdata', function($resource) {

    var list_data = 'http://127.0.0.1:8000/lists/?format=json' ;



    return $resource(list_data, {}, {

      query: {
          method: 'GET',
          isArray:true,
        }

    });


});
Controller.js:-

app.controller('dasboardController', ['$rootScope', '$scope', '$http', '$window', 'Instlistdata', function($rootScope, $scope, $http, $window, Instlistdata) {


    $scope.lists = []; 

    Instlistdata.query({},function(data) {

    $scope.lists = data;

    console.log(data);

    });

}]);
现在,它在控制台中为我提供JSON输出。但我需要过滤输出,即

[
    {

        "id": 1,
        "group": "AB",
        "name": "John",
        "date_modified": "2018-01-30T12:01:47Z"

    },
    {

        "id": 2,
        "group": "BC",
        "name": "Alex",
        "date_modified": "2018-01-30T12:04:43Z"

    },
    {

        "id": 3,
        "group": "CD",
        "name": "Peter",
        "date_modified": "2018-01-29T12:00:07Z"

    }
]

“修改日期”:“2018-01-30T12:01:47Z”
高于
“修改日期”:“2018-01-29T12:00:02Z”
其中
“组”:“AB”
“名称”:“John”
。您可以看到我们忽略了另一个。

您可以使用以下代码实现这一点:

var array = [
    {

        "id": 1,
        "group": "AB",
        "name": "John",
        "date_modified": "2018-01-30T12:01:47Z"

    },
    {

        "id": 2,
        "group": "BC",
        "name": "Alex",
        "date_modified": "2018-01-30T12:04:43Z"

    },
    {

        "id": 3,
        "group": "AB",
        "name": "John",
        "date_modified": "2018-01-29T12:00:02Z"

    },
    {

        "id": 4,
        "group": "CD",
        "name": "Peter",
        "date_modified": "2018-01-29T12:00:07Z"

    }
];

function keep(el, subArray) {
  var found = subArray.filter(function(current) {
    return current.id != el.id && current.name == el.name && current.group == el.group;
  });

  if (found && found.length > 0) {
    var keepThis = true
    var date1 = new Date(el.date_modified)
    found.forEach(function(foundEl) {
      var date2 = new Date(foundEl.date_modified)
      keepThis = date1.getTime() > date2.getTime() && el.id < foundEl.id
    })
    return keepThis
  } else {
    return true
  }
}

var filteredArray = array.filter(function(el, index, arr) {
  return keep(el, arr)
})

请澄清你的问题。你想用js代码(即angular service或controller)完成这项工作,还是想通过angular filter实现这项工作?js代码可以。它实际上只检查前两个对象。如果有多个对象(超过2个)具有相同的组和名称,则忽略其他对象。要检查此情况,请再添加一个对象,如{“id”:5,“组”:“AB”,“名称”:“John”,“date_modified”:“2018-01-30T12:05:47Z},您可以看到它仍在打印id为5的对象,因为我们处理时间戳。这种情况应该很少发生。我已修复了它。
[
  {
    "id": 1,
    "group": "AB",
    "name": "John",
    "date_modified": "2018-01-30T12:01:47Z"
  },
  {
    "id": 2,
    "group": "BC",
    "name": "Alex",
    "date_modified": "2018-01-30T12:04:43Z"
  },
  {
    "id": 4,
    "group": "CD",
    "name": "Peter",
    "date_modified": "2018-01-29T12:00:07Z"
  }
]