对于大多数此类操作,我们使用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文档中遗漏了什么?是否有内置的更符合惯用法的方法来实现这个?或者我应该采用我的额外检查方法?