以下是我的数据示例:
[
{
"_id": "54ff1f21592a15378825aa33",
"timeline": "54fb49274e3e0c17271205d9",
"name": "Ade Idowu",
"first_name": "Ade",
"last_name": "Idowu",
"cohort": {
"name": "Class III",
"color": "#308cea"
},
"__v": 3,
"tasks": [
{
"_id": "54ff2eb0a6299969a08f8797",
"personName": "Ade Idowu",
"projectName": "yec",
"startDate": "2015-03-19T23:00:00.000Z",
"endDate": "2015-03-06T23:00:00.000Z",
}
]
},
{
"_id": "54ff1f21592a15378825aa33",
"timeline": "54fb49274e3e0c17271205d9",
"name": "Bola Idowu",
"first_name": "Bola",
"last_name": "Idowu",
"cohort": {
"name": "Class III",
"color": "#308cea"
},
"__v": 3,
"tasks": []
}
]
我想查询person.tasks
以显示其tasks数组为空的那些名称以及tasks.endDate
已过期的名称。我很感激使用javascript或者可能是lodash。
答案 0 :(得分:1)
使用lodash _.filter(collection,predicate):
迭代集合的元素,返回所有的数组 元素谓词返回truthy for。
谓词检查迭代的任务数组是否为空或任务endDate是否小于当前时间。
.getTime()
返回日期对象的ms值,以便您可以比较两个日期。如果您希望按其他粒度(例如小时,天)进行过滤,则可以对此进行调整。
_.filter(dataObject, function(item){
var now = new Date();
return item.tasks.length == 0 || (newDate(item.tasks.endDate).getTime() < now.getTime());
});