2016-07-02 8 views
1

javascriptの '.has'マップメソッドを使用して、マップに日付キーがあるかどうかを確認しています。 console.logはtrueを返しますが、falseを返します。map.hasを使ってjsの2つの日付を比較します。

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

javascriptの地図は非常にがっかりしているし、実際にアイデンティティマップのように動作し、つまり、キーは単に===ではなく、いくつかのスマートな、潜在的にユーザー定義の等価関数またはハッシュと比較されています。

すべての日付に異なる参照があるため、あなたのケースでは機能しません。

あなたが望むものを達成するためには、代わりにタイムスタンプを保存して比較する必要があります(これは数字なので、あなたが探している適切な動作になります)。数字はtoStringされても比較は可能ですので、普通のオブジェクトでも動作します。 多分良く、オブジェクトにすぐに日付を格納しますのtoString()は、それが実際に動作します:

var map = {} 

https://jsfiddle.net/u9m9vspq/

関連する問題