array
にdate
が含まれているかどうかを確認するにはどうすればよいですか?配列が含まれているかどうか確認する
const dateArr = [new Date("12-12-2012"), new Date("06-06-2006"), new Date("01-01-2001")]
dateArr.includes(new Date("12-12-2012"))
偽
それはなぜですか?
array
にdate
が含まれているかどうかを確認するにはどうすればよいですか?配列が含まれているかどうか確認する
const dateArr = [new Date("12-12-2012"), new Date("06-06-2006"), new Date("01-01-2001")]
dateArr.includes(new Date("12-12-2012"))
偽
それはなぜですか?
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")
は無効な日付を生成します。
素晴らしい!他のブラウザでうまく動作する –
新しい日付()は新しい参照値**です。 '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
新しい日付( "2012年12月12日")==新しい日付( "2012年12月12日") '* *は 'false'を返します** - これらの項目は同じではないので、' includes'はそれらを無視します。ここでいくつかの情報を得ることができます:[なぜ2つの同一のオブジェクトが互いに等しくないのですか?](https://stackoverflow.com/questions/11704971/why-are-two-identical-objects-not-equal-to-お互い) – Santi