2011-08-23 60 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

相关问题