Я новичок в javascript, и мне нужно получить часть (срез) отсортированного массива (Numbers, timestamps в основном) с помощью start_value и end_value.
Например, скажем, у меня есть массив случайных временных меток за последний месяц, и я хочу получить все временные метки между двумя неделями назад и неделю назад. Это довольно простой алгоритм для записи (используя двоичный поиск), но я не хочу испортить свой код с этими вычислениями. Я искал способ сделать это в javascript, но не нашел.
Спасибо за любую будущую помощь :)
Возможно, использовать 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);
С положительной стороны это даже не нужно их сортировать. С нижней стороны это, вероятно, будет не так быстро, как хорошо реализованный двоичный поиск соответствующих начальных и конечных точек. Если у вас нет действительно жестких требований к производительности, я не думаю, что это будет иметь значение.
Хорошо, я нашел чистую библиотеку js, называемую binarysearch, которая имеет именно то, что я ищу: https://www.npmjs.com/package/binarysearch. Он имеет функцию rangeValue, которая принимает несуществующие числа как начальные. Кажется, работает :)
indexOf()
чтобы найти начальный и конечный индексы, а затем просто вызватьslice()
с ними. Вы могли бы даже искать конечный индекс на 1 после возвращенного начального индекса, чтобы ускорить его.