0

Пожалуйста, подскажите. Есть массив:

var Times = [
  {'t':1535453166750,'descr':'Время 1'},
  {'t':1535441482000,'descr':'Время 2'},
  {'t':1535441482000,'descr':'Время 3'}
];

t = Время, в формате Unix Timestamp.

Как можно произвести выборку, чтобы передав параметр, например t=1535453083250, получить ближайшее или точное значение descr, если есть элемент, удовлетворяющий условие t>=элемент.t

Sam
  • 45

1 Answers1

0

Вам нужно пробежаться по массиву, подсчитать разницу t - элемент.t и вывести элемент с минимальной неотрицательной разницей

var Times = [
  {'t':1535453166750,'descr':'Время 1'},
  {'t':1535441482000,'descr':'Время 2'},
  {'t':1535441482000,'descr':'Время 3'}
];

t=1535453083250;

function findNear(ATimes, AT) { var res = -1; var delta = -1; for (var i = 0; i < ATimes.length; i++) { const curDelta = AT - ATimes[i].t; if (curDelta === 0) // нашли точное совпадение. Выходим return i; if (curDelta > 0 && (delta === -1 || curDelta < delta)) { res = i; delta = curDelta; } } return res; }

console.log(Times[findNear(Times, t)].descr);

Если же массив отсортирован по возрастанию времени, до достаточно найти первую неотрицательную разницу

function findNear(ATimes, AT) {
  for (var i = 0; i < ATimes.length; i++) {
    const delta = AT - ATimes[i].t;
    if (delta >= 0)
      return i;
  }
  return -1;
}
  • Можно по всем не бегать, достаточно до первого с неотрицательной разницей (в случае сортированного массива). – Эникейщик Sep 03 '18 at 07:59
  • В вопросе масссив не отсортирован – Anton Shchyrov Sep 03 '18 at 08:03
  • Отсортирован по уменьшению t. – Эникейщик Sep 03 '18 at 08:05
  • Автор утверждает, что отсортирован по возрастанию – Anton Shchyrov Sep 03 '18 at 08:08
  • Поэтому я и уточнил, что необязательно подсчитывать разницу с каждым элементов. – Эникейщик Sep 03 '18 at 08:10
  • Простите, пожалуйста. На самом деле массив - отсортирован, единственное в примере последовательность задал не по порядку.

    Спасибо, большое за помощь. Проверил, все действительно работает.

    – Sam Sep 03 '18 at 08:11
  • Если массив отсортирован, то да. А отсортирован ли он у автора - неизвестно. Автор путается в показаниях – Anton Shchyrov Sep 03 '18 at 08:12
  • 1
    Для отсортированного подойдёт бинарный поиск – MBo Sep 03 '18 at 09:32