JavaScript或jQuery可以在多个条件上对JSON数组进行排序吗?
我有一个自动完成列表的潜在结果的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中是否有任何内置function可以做到这一点?
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; } });
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 ,如果一个字符串匹配我至少忽略大小写和间距的查询。