Guest User

Untitled

a guest
Dec 14th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. var searchBinary = function(needle, haystack, case_insensitive) {
  2. if(needle == "") return [];
  3. var haystackLength = haystack.length;
  4. var letterNumber = needle.length;
  5. case_insensitive = (typeof(case_insensitive) === 'undefined' || case_insensitive) ? true:false;
  6. needle = (case_insensitive) ? needle.toLowerCase():needle;
  7.  
  8. /* start binary search, Get middle position */
  9. var getElementPosition = findElement()
  10.  
  11. /* get interval and return result array */
  12. if(getElementPosition == -1) return [];
  13. return getRangeElement = findRangeElement()
  14.  
  15. function findElement() {
  16. if (typeof(haystack) === 'undefined' || !haystackLength) return -1;
  17.  
  18. var high = haystack.length - 1;
  19. var low = 0;
  20.  
  21. while (low <= high) {
  22. mid = parseInt((low + high) / 2);
  23. var element = haystack[mid].substr(0,letterNumber);
  24. element = (case_insensitive) ? element.toLowerCase():element;
  25.  
  26. if (element > needle) {
  27. high = mid - 1;
  28. } else if (element < needle) {
  29. low = mid + 1;
  30. } else {
  31.  
  32. return mid;
  33. }
  34. }
  35. return -1;
  36. }
  37. function findRangeElement(){
  38.  
  39. for(i=getElementPosition; i>0; i--){
  40. var element = (case_insensitive) ? haystack[i].substr(0,letterNumber).toLowerCase() : haystack[i].substr(0,letterNumber);
  41. if(element != needle){
  42. var start = i+1;
  43. break;
  44. }else{
  45. var start = 0;
  46. }
  47. }
  48. for(i=getElementPosition; i<haystackLength; i++ ){
  49. var element = (case_insensitive) ? haystack[i].substr(0,letterNumber).toLowerCase() : haystack[i].substr(0,letterNumber);
  50. if(element != needle){
  51. var end = i;
  52. break;
  53. }else{
  54. var end = haystackLength -1;
  55. }
  56. }
  57. var result = [];
  58. for(i=start; i<end;i++){
  59. result.push(haystack[i])
  60. }
  61.  
  62. return result;
  63. }
  64.  
  65. };
Add Comment
Please, Sign In to add comment