2011-08-23 53 views
4

我有一個自動完成列表的潛在結果的JSON數組。JavaScript或jQuery可以根據多個條件對JSON數組進行排序嗎?

列表定義爲:

var fundList = [ //there's lots more than this 
    { "name": "Pension Managed Fund 1" }, 
    { "name": "Managed Property Fund 2" }, 
    { "name": "Retirement Managed Fund 3" }, 
    { "name": "Retirement Managed Fund 4" } 
] 

我需要按字母順序排序列表中,但它也通過了相關性輸入到文本框中的值(這觸發automcomplete)

訂購

因此,例如,如果用戶鍵入「管理」到文本框,列表上方將如下分類:

Managed Property Fund 2 

Pension Managed Fund 1 

Retirement Managed Fund 3 

Retirement Managed Fund 4 

如果他們輸入了「退休」,列表會排序:

Retirement Managed Fund 3 

Retirement Managed Fund 4 

Managed Property Fund 2 

Pension Managed Fund 1 

如果「基金」類型的,順序將是正常的字母順序排列:

Managed Property Fund 2 

Pension Managed Fund 1 

Retirement Managed Fund 3 

Retirement Managed Fund 4 

有沒有在JavaScript或jQuery的任何內置的功能,這將做到這一點?

+0

備註:解碼後,它不再是JSON。 –

回答

1

JavaScript有一個數組排序的方法,可以採取一個函數作爲參數,這將允許你定義你想怎麼東西整理

例如

var fundList = [ //there's lots more than this 
    { "name": "Pension Managed Fund 1" }, 
    { "name": "Managed Property Fund 2" }, 
    { "name": "Retirement Managed Fund 3" }, 
    { "name": "Retirement Managed Fund 4" } 
] 

funcList.sort(function(a, b){ 
if (a == b) 
{ 
    return 0; 
} 

if (SOME CRITERIA TO SORT a AT A LOWER INDEX THEN b) 
{ 
    return -1; 
} 

if (SOME CRITERIA TO SORT b AT A LOWER INDEX THEN a) 
{ 
    return 1; 
} 
}); 
1

Array.prototype.sort可以採取一個功能比較;我猜你需要對每個包含搜索項的字符串進行排序,然後按字母順序打破關係:

var query = 'Managed'; 
fundList.sort(function(a, b) 
{ 
    var match_a = a.name.indexOf(query) >= 0; 
    var match_b = b.name.indexOf(query) >= 0; 
    if(match_a && !match_b) 
     return -1; 
    if(!match_a && match_b) 
     return 1; 
    if(a.name < b.name) 
     return -1; 
    if(a.name > b.name) 
     return 1; 
    return 0; 
}); 

以此爲起點;而不是String.prototype.indexOf來處理,如果一個字符串匹配查詢我會至少忽略大小寫和間距。

+0

嗨安德魯,這看起來很有用,但我不確定參數'a'&'b'是什麼。試試這裏的代碼,都是'未定義'。我明白你的觀點,但關於使用indexOf。我會嘗試使用一個正則表達式。 – DaveDev

+0

我的大腦處於錯誤的模式;沒有「功能」之前的「新」它應該更好地工作。 'a'和'b'是數組中的兩個元素,'sort'要求你確定的順序。 –

+0

我也只是注意到你的數組具有名稱屬性而不是字符串的對象,所以我也修正了這個問題。 –

相關問題