首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript或jQuery是否可以根据多个条件对JSON数组进行排序?

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

Stack Overflow用户
提问于 2011-08-23 19:27:33
回答 2查看 3.9K关注 0票数 4

我有一个用于自动补全列表的JSON潜在结果数组。

该列表定义为:

代码语言: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" }
]

我需要按字母顺序对列表进行排序,但它还必须按照与文本框中输入的值的相关性进行排序(这会触发自动完成)

因此,例如,如果用户在文本框中键入"Managed“,则上面的列表将按如下方式排序:

代码语言:javascript
复制
Managed Property Fund 2

Pension Managed Fund 1

Retirement Managed Fund 3

Retirement Managed Fund 4

如果他们输入“退休”,该列表将被排序:

代码语言:javascript
复制
Retirement Managed Fund 3

Retirement Managed Fund 4

Managed Property Fund 2

Pension Managed Fund 1

如果键入了“基金”,则顺序将是正常的字母顺序:

代码语言:javascript
复制
Managed Property Fund 2

Pension Managed Fund 1

Retirement Managed Fund 3

Retirement Managed Fund 4

在JavaScript或jQuery中有没有内置的功能可以做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2011-08-23 19:36:11

javascript有一个数组排序方法,它可以接受一个函数作为参数,这将允许您定义如何对事物进行排序

例如

代码语言: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
EN

Stack Overflow用户

发布于 2011-08-23 19:37:26

Array.prototype.sort可以接受一个函数作为比较器;我猜您需要将包含搜索词的每个字符串排在每个不包含搜索词的字符串之前,并按字母顺序打破关系:

代码语言:javascript
复制
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来判断字符串是否与查询匹配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7160263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档