0
我正在嘗試使用模式匹配的JavaScript中的二進制搜索。但問題在很多情況下都是失敗的。模式匹配在JavaScript中搜索
我試過這段代碼。
function binarySearch(ar, el, compare_fn) {
var m = 0;
var n = ar.length - 1;
while (m <= n) {
var k = parseInt((n + m)/2);
var cmp = compare_fn(el, ar[k]);
if (cmp > 0) {
m = k + 1;
console.log(cmp,m,ar[m],k)
} else if(cmp < 0) {
n = k - 1;
console.log(cmp,n,ar[n],k)
} else {
return k;
}
}
return -m - 1;
}
function compare_number(a, b) {
var regExp = new RegExp(a, 'gi');
var match= (regExp.test(b)?0:1);
if(match){
match=a.localeCompare(b);
}
return(match);
}
new function test() {
var ar = ["job0000ya","job0002","job003","hello","myui",];
var n = binarySearch(ar, "ya", compare_number);
console.log([n]);
}();
但似乎它在這種特殊情況下的失敗。建議我可以使它成爲可能。
順便說一句,'new'不是用於起動IIFE推薦關鍵字。更好地使用'void'。這迫使表達式進行評估。 –
它可能是,在這種情況下,搜索不起作用,因爲二進制排序需要排序的數據和一個返回更小/相等/更大值的函數,但它不適用於字符串內的部分,使用正則表達式兩個字符串之間的比較,以及缺少資格的字符串來自哪個字符串。 –
任何建議如何實現這一目標? –