我有一个具有这种结构的对象数组
let events = [ {
"initDate": "2019-11-20",
"finalDate": "2019-11-22",
"intermediateDates": [
"2019-11-20",
"2019-11-21"
],
"priority": 1
},....]
因此,我试图获取与给定日期数组匹配的对象,例如:
let filteredDays = [
"2019-11-20",
"2019-11-21",
"2019-11-22"
]
我正在尝试像这样使用lodash:
let eventsFound= [];
let intersection = _.map( this.events,function(value){
let inter = _.intersection(value.intermediateDates,filteredDates);
console.log(inter);
if(inter != []){
foundEvents.push(value);
return value;
}else{
return false;
}
});
当我控制台登录inter时,我得到第一个带有值的数组,然后下一个数组为空,但它不断将所有事件插入foundEvents数组,并且返回的数组与事件数组相同。
最佳答案
- 您正在使用
!=
比较两个数组。在 javascript 中[] != []
始终为 true。要检查数组是否为空,请使用length
属性,例如arr.length == 0
。 - 使用
filter
而不是像forEach
那样使用map
。 - 要检查是否存在,请使用
some
/includes
组合,而不是寻找交集。
因此,过滤其一些 intermediateDates
包含在 filteredDates
中的事件:
let eventsFound = _.filter(this.events, event =>
_.some(event.intermediateDates, date =>
_.includes(filteredDates, date)
)
);
使用 native 函数相同:
let eventsFound = this.events.filter(event =>
event.intermediateDates.some(date =>
filteredDates.includes(date)
)
);
关于javascript - 使用 lodash 从与内部值匹配的对象数组和日期数组中获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58739642/