對於大多數此類操作,我們使用的是lodash庫。我接受其他建議,但可能只是在導入新的lib之前自己編寫函數。按功能的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