按键过滤地图

时间:2018-08-23 21:42:19

标签: javascript typescript

我有一张地图:

for (let jobInArray of jobs) {

  // lets me get rid of time, outputs to YYYY-MM-dd
  let deliveryDateString: string = new Date(jobInArray.DeliveryDate).toLocaleDateString("en-us");

  if (dateJobsMap.has(deliveryDateString)) {
    let jobsForDate: IDeliveryJob[] = dateJobsMap.get(deliveryDateString);
    jobsForDate.push(jobInArray);
  }
  else {
    dateJobsMap.set(deliveryDateString, [jobInArray]);
  }
}

给我:

dateJobsSortedMap:  Map(12) {"8/23/2018" => Array(14), "8/22/2018" => Array(19),...

我要删除任何比当前日期早的条目。

我尝试过:

let foobar = [...dateJobsMap.keys()].filter((item: string) => {
  console.log("item: ", item);

  let temp = new Date(item);

  return temp >= new Date();
});

但是返回空。它应该返回今天的项目(2018年8月23日)。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

问题是,当您从m/dd/yyyy模板创建日期时,其小时,分钟和秒将始终为00:00:00,但是当您创建带有空输入参数的日期时-始终是当前的小时,分​​钟和秒。因此,您可以这样做:

let foobar = [...dateJobsMap.keys()].filter((item: string) => {
  console.log("item: ", item);

  let temp = new Date(item + " 23:59:59");

  return temp >= new Date();
});

答案 1 :(得分:1)

或将比较日期的小时数设置为0

let data = [["8/23/2018", Array(14)],["8/22/2018", Array(14)],["8/21/2018", Array(14)]];

let map = new Map(data);


let foobar = [...map.keys()].filter(item => {
  let temp = new Date(item)
  return temp >= new Date().setHours(0,0,0,0)
});

console.log(foobar);