Javascript AngularJS中的API端点输出JSON过滤器
我有一个端点API。有四个带有键的对象,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",
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"
}
]