javascript - 使用 lodash 从与内部值匹配的对象数组和日期数组中获取对象

标签 javascript arrays angular lodash

我有一个具有这种结构的对象数组

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数组,并且返回的数组与事件数组相同。

最佳答案

  1. 您正在使用 != 比较两个数组。在 javascript 中 [] != [] 始终为 true。要检查数组是否为空,请使用 length 属性,例如 arr.length == 0
  2. 使用 filter 而不是像 forEach 那样使用 map
  3. 要检查是否存在,请使用 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/

相关文章:

Javascript - 使用变量获取对象值

javascript - 将 Angular2 TypeScript 文件和 JavaScript 文件分离到不同的文件夹中,可能是“dist”

javascript - 延迟后运行工作 javascript onload 的最佳方法

javascript - 当仅具有 onclick 处理功能的图标图像也可以工作时,为什么要使用按钮和表单来提交数据?

javascript - 无法使用 webpack 缩小 css 代码

javascript - 选择 onChange 链接到值 - ReactJS

将动态 c 数组循环移位 n 个元素

c++ - 从 cql::cql_byte_t* {aka unsigned char*} 到 const char* 的无效转换

angular - 这是在 angularfire2 中使用 rxjs MergeMap 的正确方法吗?

angular - Mat-tab Material angular6 selectedIndex 不适用于 *ngFor