我想排序使用數組排序方法和indexOf自動完成建議。用戶的當前搜索詞將被插入到indexOf中。使用indexOf時,數組排序不正確/不可預測?
這裏是小提琴: https://jsfiddle.net/neowot/km1uvzo0/
這似乎一半的工作。例如,如果你輸入「Eternal」,你會得到一個看似正確的排序列表。但是,如果你從這個術語中刪除'l',那麼這個列表立即變得混亂。
但是,它不僅會在第2次搜索時搞砸......例如,如果您開始清理並搜索'A',則建議「Mechanic:Resurrection」顯示爲第二個建議。
奇怪的是,如果你搜索「200」,你會在第3次得到結果「Payuk Mhek」 - 再次。
我找不出爲什麼會出現這些錯誤。請讓我知道你是否可以幫忙。謝謝。
function AutoComplete() {
$(".searchbox").autocomplete({
source: function(request, response) {
$.when(GetMovies(request),
GetTV(request))
.done(function() {
combine = results1.concat(results2).slice(0, 15);
combine.sort(function(a, b){
if (b.value.indexOf(request.term) - a.value.indexOf(request.term) < 1) {
return 1;
}
else if (b.value.indexOf(request.term) - a.value.indexOf(request.term) > 1) {
return -1;
}
else {
return 0;
}
});
response(combine);
console.log(combine);
});
}
});
}
'results1'和'results2'沒有在你的代碼中定義,'combine'應該是'var'。 – Tomalak
@Tomalak,他們在他的完整代碼小提琴中,因爲這只是完整代碼的一小部分。 – Lucero
不,你正在使用全局變量,因爲你做錯了。比較:https://jsfiddle.net/km1uvzo0/1/最大的變化是支持jQuery Ajax請求返回promise的事實,請參閱'.then()'的使用。但還有其他各種小變化,仔細觀察。 – Tomalak