Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.08.2021, 16:12
Аспирант
Отправить личное сообщение для HotReboot Посмотреть профиль Найти все сообщения от HotReboot
 
Регистрация: 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.
Ответить с цитированием
  #2 (permalink)  
Старый 22.08.2021, 16:30
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,498

Обычным перебором, в чём сложности возникают?
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 22.08.2021, 16:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

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.
Ответить с цитированием
  #4 (permalink)  
Старый 22.08.2021, 16:40
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,498

Если массив отсортирован - примерно так:
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.
Ответить с цитированием
  #5 (permalink)  
Старый 22.08.2021, 16:55
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Сообщение от Aetae
нет смысла
будем поглядеть)))
Ответить с цитированием
  #6 (permalink)  
Старый 22.08.2021, 20:15
Аспирант
Отправить личное сообщение для HotReboot Посмотреть профиль Найти все сообщения от HotReboot
 
Регистрация: 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" ] наибольшую, то я имел ввиду не это, а если в массиве есть даты младше искомой даты.
Ответить с цитированием
  #7 (permalink)  
Старый 22.08.2021, 20:21
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,498

HotReboot, нихрена непонятно объясняешь, честно. Старшая младшая чего где.
Либо накидай примеров на каждый случай, либо чётко по пунктам расскажи что где лежит и как искать.
__________________
29375, 35
Ответить с цитированием
  #8 (permalink)  
Старый 22.08.2021, 20:29
Аспирант
Отправить личное сообщение для HotReboot Посмотреть профиль Найти все сообщения от HotReboot
 
Регистрация: 06.11.2017
Сообщений: 42

Aetae,
Уже не хочу. Мы с вам на брудершафт не пили, что бы вы мне тут тыкали. Обращусь к более воспитанным.
Ответить с цитированием
  #9 (permalink)  
Старый 22.08.2021, 20:32
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,498

HotReboot, первый раз в интернете? Мы все тут братья.
Не хочешь быть нам братом - ну и вали к своим "воспитанным".
Где только таких неженок находят.
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как найти и посчитать одинаковые изображения в массиве? Michael_isr Общие вопросы Javascript 2 05.08.2014 16:55
Найти значине ID зная значение Class a11igator Общие вопросы Javascript 7 04.03.2013 11:51
Найти значение фактариала ivaszheka Общие вопросы Javascript 1 30.10.2012 09:34
Помогите найти абсолютное значение на Java!) Заранее спасибо!) Anastasiy17 Серверные языки и технологии 3 27.09.2012 23:26
Как найти индекс по элементу в двумерном массиве? bayah Общие вопросы Javascript 5 22.04.2010 16:26