使用map.has比较js中的2个日期

时间:2016-07-02 07:06:48

标签: javascript date dictionary

我正在使用javascripts的'.has'地图方法来检查地图是否有日期键。 console.log应返回true但返回false。

http://codepen.io/BradLee/pen/bZWrwx?editors=1010

var map = new Map();

let data = {
    "Fri Jun 17 2016" : {
        "foo" : "blah"
    },
    "Sun Jun 26 2016" : {
        "foo" : "blah"
    },
    "Wed May 11 2016" : {
        "foo" : "blah"
    }
};

for (let dateString of Object.keys(data)) {
    let date = new Date(dateString);
    date.setHours(0, 0, 0, 0);

    map.set(date, "blah");
}

let date = new Date("Fri Jun 17 2016");
date.setHours(0, 0, 0, 0);

console.log(map.has(date));

1 个答案:

答案 0 :(得分:1)

javascript地图非常令人印象深刻,实际上像身份地图一样工作,也就是说,只需将密钥与===进行比较,而不是使用某些智能的,可能是用户定义的相等函数或散列。

在您的情况下,这不起作用,因为您的所有日期都有不同的引用。

为了达到你想要的效果,我担心你必须存储和比较时间戳(这是一个数字,所以===会有你正在寻找的正确行为)。它甚至可以与普通对象一起使用,因为数字会得到字符串,但比较仍然有效。 也许更好,将日期直接存储在一个对象中将toString()它,它实际上会工作:

var map = {}

https://jsfiddle.net/u9m9vspq/