下划线 - 从排序的对象数组中查找

Nar*_*esh 7 javascript underscore.js

Underscore提供了sortBy对对象数组进行排序的功能.但是,一旦我有这个排序数组,有没有办法使用二进制搜索找到一个元素?该函数find不利用数组已排序的事实,而函数indexOf确实如此,但它没有提供指定排序键的方法.

  1. 我错过了什么吗?
  2. 有没有其他JS库可以轻松实现这一点?

los*_*der 5

该函数_.sortedIndex用于二进制搜索,但比您的目的要通用一些。我将使用它来构建sortedFind,例如:

_.sortedFind = function sortedFind(list, item, key) {
    return (_.isEqual(item, list[_.sortedIndex(list, item, key)]));
}
Run Code Online (Sandbox Code Playgroud)

用法示例:

// http://jsfiddle.net/w3hzrehy/
_.sortedFind([10, 20, 30, 40, 50], 10); // true

var stooges = [{name: 'moe', age: 40}, {name: 'curly', age: 60}];
_.sortedFind(stooges, {name: 'larry', age: 50}, 'age'); // false
_.sortedFind(stooges, {name: 'curly', age: 60}, 'age'); // true
Run Code Online (Sandbox Code Playgroud)