JavaScript определяет, является ли предоставление региона и даты праздником

#javascript

Вопрос:

 const regions = [  {  id: 1,  name: "Baden-Württemberg",  holidays: HOLIDAYS_BW,  },  {  id: 2,  name: "Bayern",  holidays: HOLIDAYS_BY,  }, ]  const HOLIDAYS_BW = [  { date: "01.01.2022", day: "Samstag" },  { date: "06.01.2022", day: "Donnerstag" }, ];  const HOLIDAYS_BY = [  { date: "01.01.2022", day: "Samstag" },  { date: "06.01.2022", day: "Donnerstag" }, ];  

Как я могу проверить, является ли выбранный пользователем регион и дата праздником.

Например, я хотел бы проверить, является ли регион Бавария и дата 05.05.2022 праздником, в массиве отображаются все праздники

Я пробовал это до сих пор, но, похоже, это не работает

 regions.find((region) =gt; region.holidays.includes(date));  

Дата, которую я указал в «запросе», находится в этом формате

 Tue Mar 22 2022 01:00:00 GMT 0100  

Я думаю, что это проблема

Комментарии:

1. Каковы входы и выходы? Вы получаете название региона (строка) и дату (строка), и вам нужно значение true/false, если это праздник? Это не совсем ясно

2. @Balastrong Я хочу в основном проверить, является ли это праздником, используя этот bool, я могу продолжить дальше

Ответ №1:

Вы можете попробовать так, сначала выяснив, существует ли регион (возвращается undefined , если нет), а затем, есть ли дата в списке.

 return regions.find(r =gt; r.name == region)?.holidays.some(h =gt; h.date == date)  

Если вам не нравится undefined и вы всегда хотите ложь, просто добавьте ?? false в конце.

 return regions.find(r =gt; r.name == region)?.holidays.some(h =gt; h.date == date) ?? false  
 const HOLIDAYS_BW = [{  date: "01.01.2022",  day: "Samstag"  },  {  date: "06.01.2022",  day: "Donnerstag"  }, ];  const HOLIDAYS_BY = [{  date: "01.01.2022",  day: "Samstag"  },  {  date: "06.01.2022",  day: "Donnerstag"  }, ];  const regions = [{  id: 1,  name: "Baden-Württemberg",  holidays: HOLIDAYS_BW,  },  {  id: 2,  name: "Bayern",  holidays: HOLIDAYS_BY,  }, ]  function formatDate(date) {  return `${('0'   (date.getDate())).slice(-2)}.${('0'   (date.getMonth())).slice(-2)}.${date.getFullYear()}` }  function isHoliday(region, date) {  var formattedDate = formatDate(date);  return regions.find(r =gt; r.name == region)?.holidays.some(h =gt; h.date == formattedDate); }  console.log(isHoliday('Bayern', new Date(2022, 01, 06))); // true console.log(isHoliday('Baden-Württemberg', new Date(2022, 01, 01))); // true console.log(isHoliday('Bayern', new Date())); // false console.log(isHoliday('Hamburg', new Date(2022, 01, 06))); // undefined as Hamburg is not on the list 

Обновить

Оказывается, ввод-это дата, вы можете сначала отформатировать ее с помощью чего-то вроде:

 var formattedDate = `${('0'   (date.getDate())).slice(-2)}.${('0'   (date.getMonth())).slice(-2)}.${date.getFullYear()}`  

а затем используйте строку для сравнения.

Комментарии:

1. Спасибо за ответ, я обновил вопрос, я передаю строку даты javascript, которая является проблемой. У вас есть какое-нибудь решение для этого?=

2. Я обновил ответ. Короче говоря, вы можете преобразовать дату перед сравнением, и это все еще работает 🙂