А почему бы не использовать бинарный поиск вместо indexOf, он же быстрее на сколько я вижу
http://jsperf.com/binarysearch-vs-indexof/4
var BinarySearchBitshift = function (list, val) {
var min = 0
, max = list.length-1
;
for(;;)
{
// fall back to linear search, 11 seems to be a good threshold, but this depends on the uses comparator!! (here: ===)
if ( min + 11 > max ) {
for(var i=min ; i<=max; i++ ) {
if( val === list[i] ) {
return i;
}
}
return -1;
}
var mid = (min + max) >> 1;
var dat = list[ mid ];
if ( val === dat ) {
return mid;
}
if( val > dat ) {
min = mid + 1;
} else {
max = mid - 1;
}
}
};