function binarySearch (list, value) {
// initial values for start, middle and end
let start = 0
let stop = list.length - 1
let middle = Math.floor((start + stop) / 2)
// While the middle is not what we're looking for and the list does not have a single item
while (list[middle] !== value && start < stop) {
if (value < list[middle]) {
stop = middle - 1
} else {
start = middle + 1
}
// recalculate middle on every iteration
middle = Math.floor((start + stop) / 2)
}
// if the current middle item is what we're looking for return it's index, else return -1
return (list[middle] !== value) ? -1 : middle
}
const list = [2, 5, 8, 9, 13, 45, 67, 99]
console.log(binarySearch(list, 99)) // 7 -> returns the index of the item