我有这个数组:
$scope.damageEvants =
[
{"id":2, "StartDate":21/05/2012, EndDate:null},
{"id":3, "StartDate":null, EndDate:02/09/2014},
{"id":4, "StartDate":null, EndDate:null},
{"id":5, "StartDate":21/05/2012, EndDate:null}
];
我想从属性startDate和EndDate为null的数组中过滤(删除)所有对象。
过滤后的结果:
$scope.damageEvants =
[
{"id":2, "StartDate":21/05/2012, EndDate:null},
{"id":3, "StartDate":null, EndDate:02/09/2014},
{"id":5, "StartDate":21/05/2012, EndDate:null}
];
我试过了:
$scope.damageEvants.filter(return item.StartDate!== null && item.EndDate !== null )
但这似乎是错误的方式。
如何使用过滤功能过滤$scope.damageEvants
?
答案 0 :(得分:3)
$scope.damageEvants.filter(return item.StartDate!== null && item.EndDate !== null )
应该是
$scope.damageEvants.filter(function(item) {
return item.StartDate!== null && item.EndDate !== null;
});
filter
答案 1 :(得分:1)
$scope.damageEvants = $scope.damageEvants.filter(function(item) {
return item.StartDate!== null && item.EndDate !== null;
});
答案 2 :(得分:1)
只需检查是否设置了日期。
var array = [{ "id": 2, "StartDate": '21/05/2012', EndDate: null }, { "id": 3, "StartDate": null, EndDate: '02/09/2014' }, { "id": 4, "StartDate": null, EndDate: null }, { "id": 5, "StartDate": '21/05/2012', EndDate: null }],
result = array.filter(function (a) {
return a.StartDate || a.EndDate;
});
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
ES6版
var array = [{ "id": 2, "StartDate": '21/05/2012', EndDate: null }, { "id": 3, "StartDate": null, EndDate: '02/09/2014' }, { "id": 4, "StartDate": null, EndDate: null }, { "id": 5, "StartDate": '21/05/2012', EndDate: null }],
result = array.filter(a => a.StartDate || a.EndDate);
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
答案 3 :(得分:1)
正如Sushanth的回答所示,.filter()
期望接收一个函数值,该函数返回一个布尔值,用于确定当前数组成员是否在过滤后的数组中。您的代码正在过滤一个布尔值而不是函数值。
答案 4 :(得分:1)
另一种选择是在angular.forEach循环中拼接对象。这实际上会从原始数组中删除对象,而不是创建新数组。
示例:https://jsfiddle.net/gh03zur4/
<强>控制器强>
0 <= B <= M
基于Sushanth的答案的另一个选择是在ng-repeat列表中应用过滤器,如下所示:
https://jsfiddle.net/qj7dz2eq/
<强>控制器强>
M
<强> HTML 强>
function Controller($scope) {
$scope.damageEvants = [{
"id": 2,
"StartDate": 21 / 05 / 2012,
EndDate: null
}, {
"id": 3,
"StartDate": null,
EndDate: 02 / 09 / 2014
}, {
"id": 4,
"StartDate": null,
EndDate: null
}, {
"id": 5,
"StartDate": 21 / 05 / 2012,
EndDate: null
}];
angular.forEach($scope.damageEvants, function(event) {
if (!event.EndDate && !event.StartDate) {
var idx = $scope.damageEvants.indexOf(event);
$scope.damageEvants.splice(idx, 1);
}
});
}
执行上述任一方法都可以防止同一个数组绑定到$ scope两次。
答案 5 :(得分:1)
可以尝试:
$scope.damageEvants = $scope.damageEvants.filter(function(obj) {
return !(obj.StartDate === obj.EndDate && obj.StartDate === null);
});