簡體   English   中英

在JavaScript中對搜索結果實施多字段排序

[英]Implement multi fields sort on search results in javascript

我有一系列類似以下對象的對象:[{city:“阿姆斯特丹”,國家:“荷蘭”},{city:“ Norwalk”,國家:“美國”},{city:“ Norwalk”,國家:“美國國家”},{城市:“未知”,國家:“未知”}]

我想對結果進行排序,以便當用戶在搜索框中輸入第一個字母(例如“ n”)時,它應按以下排序順序顯示結果。 A)以“ n”開頭的城市B)以“ n”開頭的國家C)包含“ n”的城市D)包含“ n”的國家

我試圖實現這樣的事情

filteredData = gridData.filter(function (rowObj) {
        if (!!filterText) {
           //Filter records with some function. 
           return isSubstringIgnoreCase(filterText, rowObj.city) || isSubstringIgnoreCase(filterText, rowObj.country);
        }
        return true;
    });
    filteredData.sort(function(a,b) {
        var cityA = a.city.toLowerCase(),
            cityB = b.city.toLowerCase(),
            countryA = a.country.toLowerCase(),
            countryB = b.country.toLowerCase();
        filterText = filterText.toLowerCase();
        if(cityA.indexOf(filterText) < cityB.indexOf(filterText) || cityA.indexOf(filterText) < countryB.indexOf(filterText)) {
            return -1;
        } else if(cityA.indexOf(filterText) > cityB.indexOf(filterText) || cityA.indexOf(filterText) > countryB.indexOf(filterText)) {
            return 1;
        } else if(countryA.indexOf(filterText) < countryB.indexOf(filterText) || countryA.indexOf(filterText) < cityB.indexOf(filterText)){
            return -1;
        } else if(countryA.indexOf(filterText) > countryB.indexOf(filterText) || countryA.indexOf(filterText) > cityB.indexOf(filterText)){
            return 1;
        } else {
            return 0;
        }
    });

但是它沒有按預期工作。 請幫助我解決此問題。

看看我的小提琴: JSFiddle
我用:

Array . filter ()

從排序順序中刪除重復項的功能:A)-C)和B)-D)。
從搜索結果中刪除的條目來自以下順序:C)和D)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM