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

我也只是注意到你的数组具有名称属性而不是字符串的对象,所以我也修正了这个问题。 –

相关问题