Performs a binary search on the input array.
Here is the algorithm
/** * @param Array The array to search in * @param {*} needle : The item to search for within the array. * @return {Number} The index of the element which defaults to -1 when not found. */ function binaryIndexOf(arr, needle) { if (arr.length === 0) { return -1; } var minIndex = 0; var maxIndex = arr.length - 1; var currentIndex; var currentElement; while (minIndex <= maxIndex) { currentIndex = Math.floor((minIndex + maxIndex) / 2); currentElement = arr[currentIndex]; if (currentElement < needle) { minIndex = currentIndex + 1; } else if (currentElement > needle) { maxIndex = currentIndex - 1; } else { return currentIndex; } } return -1; }
ref: http://oli.me.uk/2013/06/08/searching-javascript-arrays-with-a-binary-search/