对于大多数此类操作,我们使用的是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