#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. Я обновил ответ. Короче говоря, вы можете преобразовать дату перед сравнением, и это все еще работает 🙂