2017-10-26 10 views
0

arraydateが含まれているかどうかを確認するにはどうすればよいですか?配列が含まれているかどうか確認する

const dateArr = [new Date("12-12-2012"), new Date("06-06-2006"), new Date("01-01-2001")] 

dateArr.includes(new Date("12-12-2012")) 

それはなぜですか?

+0

新しい日付()は新しい参照値**です。 'var dateArr = [new Date(" 12-12-2012 ")。getTime()、new Date(" 06-06-2006 ")。getTime()、new Date(" 01-01-2001 ")を試してください。時間をもらう()]; dateArr.includes(新しい日付( "2012年12月12日")。getTime()) '' – gurvinder372

+0

新しい日付( "2012年12月12日")==新しい日付( "2012年12月12日") '* *は 'false'を返します** - これらの項目は同じではないので、' includes'はそれらを無視します。ここでいくつかの情報を得ることができます:[なぜ2つの同一のオブジェクトが互いに等しくないのですか?](https://stackoverflow.com/questions/11704971/why-are-two-identical-objects-not-equal-to-お互い) – Santi

答えて

2

new Date("12-12-2012")と呼ぶたびに、新しいオブジェクトを作成します。これらのオブジェクトは内部で同じ値を持ちますが、異なるオブジェクトです。 dateArray.includesは参照IDをチェックし、異なるオブジェクトであるためチェックに失敗します。

あなたには、いくつかの条件に一致する要素があるのか​​どうかを確認したい場合は、array.find使用し、「等しい」としてカウントすべきかを指定することができます。

const dateArr = [new Date(1), new Date(2), new Date(3)] 
 

 
const testDate = new Date(1); 
 
const match = dateArr.find(d => d.getTime() === testDate.getTime()) 
 
const hasMatch = !!match; // convert to boolean 
 
console.log(hasMatch);

PS、ブラウザ間で矛盾があるため、日付文字列を使用して日付を作成することは避けてください。たとえば、firefoxの場合、new Date("12-12-2012")は無効な日付を生成します。

+0

素晴らしい!他のブラウザでうまく動作する –

関連する問題