我有一个用于自动补全列表的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" }
]我需要按字母顺序对列表进行排序,但它还必须按照与文本框中输入的值的相关性进行排序(这会触发自动完成)
因此,例如,如果用户在文本框中键入"Managed“,则上面的列表将按如下方式排序:
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中有没有内置的功能可以做到这一点?
发布于 2011-08-23 19:36:11
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;
}
});发布于 2011-08-23 19:37:26
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来判断字符串是否与查询匹配。
https://stackoverflow.com/questions/7160263
复制相似问题