Получение части отсортированного массива от начального значения до конечного значения

1

Я новичок в javascript, и мне нужно получить часть (срез) отсортированного массива (Numbers, timestamps в основном) с помощью start_value и end_value.

Например, скажем, у меня есть массив случайных временных меток за последний месяц, и я хочу получить все временные метки между двумя неделями назад и неделю назад. Это довольно простой алгоритм для записи (используя двоичный поиск), но я не хочу испортить свой код с этими вычислениями. Я искал способ сделать это в javascript, но не нашел.

Спасибо за любую будущую помощь :)

  • 0
    Вы уже что-то пробовали?
  • 0
    Если он отсортирован, вы можете использовать indexOf() чтобы найти начальный и конечный индексы, а затем просто вызвать slice() с ними. Вы могли бы даже искать конечный индекс на 1 после возвращенного начального индекса, чтобы ускорить его.
Показать ещё 3 комментария
Теги:

2 ответа

1

Возможно, использовать filter?

var dates = [123, 234, 456, 468, 568, 678];
var min = 300;
var max = 500;

var inRange = dates.filter(function(date) {
    return min < date && date < max;
});

console.log(inRange);

С положительной стороны это даже не нужно их сортировать. С нижней стороны это, вероятно, будет не так быстро, как хорошо реализованный двоичный поиск соответствующих начальных и конечных точек. Если у вас нет действительно жестких требований к производительности, я не думаю, что это будет иметь значение.

  • 0
    Благодарю за ваш ответ. Массив может быть довольно большим, и это компонент пользовательского интерфейса, поэтому использование O (n) над O (log-n) на самом деле не вариант.
  • 0
    Насколько большой мы говорим?
Показать ещё 2 комментария
0

Хорошо, я нашел чистую библиотеку js, называемую binarysearch, которая имеет именно то, что я ищу: https://www.npmjs.com/package/binarysearch. Он имеет функцию rangeValue, которая принимает несуществующие числа как начальные. Кажется, работает :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню