JavaScript或jQuery可以根据多个条件对JSON数组进行排序吗?

JavaScript或jQuery可以根据多个条件对JSON数组进行排序吗?,javascript,jquery,json,sorting,Javascript,Jquery,Json,Sorting,我有一个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 Fu

我有一个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”,列表将按以下顺序排列:

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中是否有任何内置功能可以做到这一点?

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;
 }
});
可以将函数作为比较器;我想您需要将每个包含搜索项的字符串排序在每个不包含搜索项的字符串之前,并按字母顺序断开联系:

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;
});
var查询='Managed';
fundList.sort(函数(a,b)
{
var match_a=a.name.indexOf(查询)>=0;
var match_b=b.name.indexOf(查询)>=0;
如果(匹配a&&!匹配b)
返回-1;
如果(!匹配a和匹配b)
返回1;
如果(a.nameb.name)
返回1;
返回0;
});

以此为出发点;与其计算字符串是否与查询匹配,我至少会忽略大小写和间距。

嗨,安德鲁,这看起来很有用,但我不确定参数
a
b
是什么。只是在这里尝试代码,两者都是“未定义的”。我明白你关于使用indexOf的观点。我会试着用正则表达式,我的大脑处于错误的模式;如果在“功能”之前没有“新”,它应该工作得更好
a
b
是数组中的两个元素,
sort
希望您确定的顺序。我还注意到数组中的对象具有名称属性而不是字符串,因此我也解决了这个问题。旁注:一旦解码,它就不再是JSON了。