41 lines · 968 B · TypeScript
RawDownload
export namespace Binary {  export function search<T>(array: T[], id: string, compare: (item: T) => string): { found: boolean; index: number } {    let left = 0    let right = array.length - 1     while (left <= right) {      const mid = Math.floor((left + right) / 2)      const midId = compare(array[mid])       if (midId === id) {        return { found: true, index: mid }      } else if (midId < id) {        left = mid + 1      } else {        right = mid - 1      }    }     return { found: false, index: left }  }   export function insert<T>(array: T[], item: T, compare: (item: T) => string): T[] {    const id = compare(item)    let left = 0    let right = array.length     while (left < right) {      const mid = Math.floor((left + right) / 2)      const midId = compare(array[mid])       if (midId < id) {        left = mid + 1      } else {        right = mid      }    }     array.splice(left, 0, item)    return array  }}