Найти ближайшее большее значение в многомерном массиве.
Здравствуйте. Есть многомерный массив с датами начальная дата и конечная.
var dates = [ ['2021-08-15', '2021-08-20'], ['2021-09-01', '2021-09-05'] ]; и есть одно значение var date = '2021-08-25'; Каким алгоритмом можно найти ближайшую, более старшую, дату из массива и присвоить переменной её значение? Спасибо. P.S. Переменная date не может быть в промежутках между датами массива. |
Обычным перебором, в чём сложности возникают?
|
HotReboot,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> </style> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> <script> var dates = [ ['2021-08-15', '2021-08-20'], ['2021-09-01', '2021-09-05'], ] var data = '2021-08-25', bigdata; function time(d) { d = new Date(d); d.setHours(0, 0, 0, 0); return d } var dd = time(data); k: for (let [a, b] of dates) { [a, b] = [a, b].map(time); for (; a < b; a.setHours(24, 0, 0, 0)) { if (+a > +dd) { bigdata = a; break k; } } } if (bigdata) bigdata = $.datepicker.formatDate("yy-mm-dd", bigdata); alert(bigdata) </script> </head> <body> </body> </html> |
Если массив отсортирован - примерно так:
function findEndDate(dates, date, defaultValue = null) { for(const [start, end] of dates) { if(end >= date) { // старшая дата if(start <= date) { // дата внутри диапазона throw new RangeError(`Дата ${date} внутри диапазона ${start} - ${end}.`); } return end; } } return defaultValue; } рони, нет смысла преобразовывать дату в Date, имеющийся формат нормально сравнивается как строка.) |
Цитата:
|
Aetae, Ну как-то ни так. Имеем
[ [ "2021-08-24", "2021-08-30" ], [ "2022-08-22", "2022-08-22" ] ] и 2021-08-22 в ответ функция отдаёт 2021-08-30. Если под "старшей" датой вы подумали что из [ "2021-08-24", "2021-08-30" ] наибольшую, то я имел ввиду не это, а если в массиве есть даты младше искомой даты. |
HotReboot, нихрена непонятно объясняешь, честно. Старшая младшая чего где.
Либо накидай примеров на каждый случай, либо чётко по пунктам расскажи что где лежит и как искать. |
Aetae,
Уже не хочу. Мы с вам на брудершафт не пили, что бы вы мне тут тыкали. Обращусь к более воспитанным. |
HotReboot, первый раз в интернете? Мы все тут братья.
Не хочешь быть нам братом - ну и вали к своим "воспитанным". Где только таких неженок находят. |
Часовой пояс GMT +3, время: 18:42. |