如何基于status字段筛选嵌套数组中的任务列表为Open/Closed状态?
按status筛选taskList任务的正确实现方法
你当前的代码问题在于,_.filter(data, { taskList: [ { status: "open" } ]})是在判断整个data条目是否存在至少一个status为open的任务,而不是去过滤每个条目里的taskList数组内容,所以才会返回包含全部任务的完整数组。
要实现每个createdOn对应的taskList仅保留指定status的任务,你需要结合_.map和_.filter:遍历每个数据条目,保留原有的createdOn字段,同时对taskList进行筛选。
筛选status为"open"的任务
const openTasks = _.map(data, item => ({ ...item, taskList: _.filter(item.taskList, { status: "open" }) })); console.log(openTasks);
筛选status为"closed"的任务
只需要把筛选条件里的status值改成"closed"即可:
const closedTasks = _.map(data, item => ({ ...item, taskList: _.filter(item.taskList, { status: "closed" }) })); console.log(closedTasks);
验证结果
以你提供的示例数据为例,openTasks的输出会是:
[ { "createdOn": "Created on Jan 07, 2017", "taskList": [ { "task": "Meeting with Ram", "status": "open" } ] }, { "createdOn": "Created on Jan 08, 2017", "taskList": [ { "task": "Meeting with Mike", "status": "open" } ] } ]
完全符合你期望的每个createdOn对应taskList仅保留指定status任务的需求。
内容的提问来源于stack exchange,提问作者Balasubramanian
相关产品推荐
相关产品推荐

