Для большинства таких операций мы используем библиотеку lodash. Я открыт для других предложений, но, скорее всего, просто напишу функцию перед импортом новой библиотеки.javascript/lodash бинарный поиск по функциям
lodash имеет sortedIndexOf
, который выполняет двоичный поиск в отсортированном массиве (возвращает индекс соответствия или -1, если не найден). Он также имеет sortedIndexBy
, который, используя двоичный поиск, находит индекс для вставки нового элемента, где вы можете указать функцию, используемую для сравнения сортировки (возвращает действительный индекс, если не найден)
Я не могу найти чтобы выполнить поиск (индекс возврата, только если найден), используя эффективный сортированный поиск, позволяющий указать функцию сортировки. Это может выглядеть примерно так:
_.sortedFindBy(array, value, function(x){x.timestamp})
Я считаю, что я мог бы использовать
var idx = _.sortedIndexBy(array, value, function(x){x.timestamp})
return (array[idx] && array[idx].timestamp === value.timestamp) ? idx : -1
, но это только кажется странным для меня, чтобы не иметь синтаксически более компактный и удобный вид уже навороченный набор сортированных функций поиска.
Я что-то упустил из документов lodash? Есть ли встроенный способ сделать это более идиоматично? Или я должен пойти с моим методом проверки?
Я не думаю, что вы ничего из документации не хватает, и есть не идиоматическое способ, которым я мог бы найти это было более эффективно, чем то, что вы написали. – DevShep