2011-08-23 51 views
1

我問較早以下問題:Can JavaScript or jQuery sort a JSON array on multiple criteria?如何根據名稱對此JavaScript對象進行排序,然後按相關性排序?

我想可能是在問這個問題,因爲我指定一個JavaScript陣列,而不是一個對象都犯了一個錯誤,並且看起來這種差異是困難的根源我正在經歷。

我存在我的網頁,這是用於自動完成功能由JSON定義了以下對象:

var fundList = [ 
    { "name": "Pension Managed Fund 1", "id": 21, "cid": "N0", "dupId": 53 }, 
    { "name": "Managed Property Fund 2", "id": 407, "cid": "N0", "dupId": 58 }, 
    { "name": "Retirement Managed Fund 3", "id": 640, "cid": "N0", "dupId": 111 }, 
    { "name": "Retirement Managed Fund 4", "id": 752, "cid": "N0", "dupId": 115 } 
] 

我需要按字母順序基於他們的名字這些項目進行排序,但他們也有

Managed Property Fund 2 

Pension Managed Fund 1 

Retirement Managed Fund 3 

Retirement Managed Fund 4 
:由所述相關性輸入到文本框的值(這觸發automcomplete)

因此,例如,如果用戶鍵入「託管」到文本框,列表上方將被排序如下進行排序

如果他們輸入了「退休」,該列表將被排序,

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 

我需要做什麼來能夠根據我指定的名稱和標準對此進行排序嗎?我試圖按照上一個問題的建議使用fundList.sort(new function(a, b),但是它返回一個未定義函數的錯誤。

+0

[這](http://www.w3schools.com/jsref/jsref_sort.asp)沒有工作? – sternr

+0

嗨,sternr,沒有。根據'fundList.sort(新函數(a,b)'不起作用。 – DaveDev

回答

0

您應該認真閱讀關於javascript的how to sort arrays

下面是做這件事:

var fundList = [ 
     { "name": "Pension Managed Fund 1", "id": 21, "cid": "N0", "dupId": 53 }, 
     { "name": "Managed Property Fund 2", "id": 407, "cid": "N0", "dupId": 58 }, 
     { "name": "Retirement Managed Fund 3", "id": 640, "cid": "N0", "dupId": 111 }, 
     { "name": "Retirement Managed Fund 4", "id": 752, "cid": "N0", "dupId": 115 } 
    ], 
    textEntered = 'Managed'; 

fundList.sort(function(a, b) 
{ 
    var aStart = a.name.match(new RegExp('^'+textEntered, 'i')) || [], 
     bStart = b.name.match(new RegExp('^'+textEntered, 'i')) || []; 

    if (aStart.length != bStart.length) return bStart.length - aStart.length; 

    else return a.name > b.name ? 1 : -1; 
}); 

http://jsfiddle.net/txJVB/3/

0
var fundList = [ 
     { "name": "Pension Managed Fund 1", "id": 21, "cid": "N0", "dupId": 53 }, 
     { "name": "Managed Property Fund 2", "id": 407, "cid": "N0", "dupId": 58 }, 
     { "name": "Retirement Managed Fund 3", "id": 640, "cid": "N0", "dupId": 111 }, 
     { "name": "Retirement Managed Fund 4", "id": 752, "cid": "N0", "dupId": 115 } 
    ], 
    textEntered = 'Managed'; 

fundList.sort(function(a, b) 
{ 
    ai = a.name.indexOf(textEntered); 
    bi = b.name.indexOf(textEntered); 
    if(ai>=0 && bi<0) return -1; 
    else if(bi>=0 && ai<0) return 1; 
    else return a.name - b.name; 
}); 
+0

如果兩個比較項都有匹配的字符串,那麼最後一個else不會按預期工作,不應該是else返回ai - bi'? – Zagen

相關問題