22.08.2021, 16:12
|
Аспирант
|
|
Регистрация: 06.11.2017
Сообщений: 42
|
|
Найти ближайшее большее значение в многомерном массиве.
Здравствуйте. Есть многомерный массив с датами начальная дата и конечная.
var dates = [
['2021-08-15', '2021-08-20'],
['2021-09-01', '2021-09-05']
];
и есть одно значение
var date = '2021-08-25';
Каким алгоритмом можно найти ближайшую, более старшую, дату из массива и присвоить переменной её значение? Спасибо.
P.S. Переменная date не может быть в промежутках между датами массива.
Последний раз редактировалось HotReboot, 22.08.2021 в 16:17.
|
|
22.08.2021, 16:30
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,589
|
|
Обычным перебором, в чём сложности возникают?
__________________
29375, 35
|
|
22.08.2021, 16:36
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
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>
Последний раз редактировалось рони, 22.08.2021 в 16:52.
|
|
22.08.2021, 16:40
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,589
|
|
Если массив отсортирован - примерно так:
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, имеющийся формат нормально сравнивается как строка.)
__________________
29375, 35
Последний раз редактировалось Aetae, 22.08.2021 в 16:44.
|
|
22.08.2021, 16:55
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
Сообщение от Aetae
|
нет смысла
|
будем поглядеть)))
|
|
22.08.2021, 20:15
|
Аспирант
|
|
Регистрация: 06.11.2017
Сообщений: 42
|
|
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" ] наибольшую, то я имел ввиду не это, а если в массиве есть даты младше искомой даты.
|
|
22.08.2021, 20:21
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,589
|
|
HotReboot, нихрена непонятно объясняешь, честно. Старшая младшая чего где.
Либо накидай примеров на каждый случай, либо чётко по пунктам расскажи что где лежит и как искать.
__________________
29375, 35
|
|
22.08.2021, 20:29
|
Аспирант
|
|
Регистрация: 06.11.2017
Сообщений: 42
|
|
Aetae,
Уже не хочу. Мы с вам на брудершафт не пили, что бы вы мне тут тыкали. Обращусь к более воспитанным.
|
|
22.08.2021, 20:32
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,589
|
|
HotReboot, первый раз в интернете? Мы все тут братья.
Не хочешь быть нам братом - ну и вали к своим "воспитанным".
Где только таких неженок находят.
__________________
29375, 35
|
|
|
|