JavaScript或jQuery可以在多个条件上对JSON数组进行排序吗? [英] Can JavaScript or jQuery sort a JSON array on multiple criteria?

查看:82
本文介绍了JavaScript或jQuery可以在多个条件上对JSON数组进行排序吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个自动完成列表的潜在结果的JSON数组。



该列表定义为:

  var fundList = [/ /这里有很多
{名称:养老金管理基金1},
{名称:管理财产基金2},
{名称:退休管理基金3},
{名称:退休管理基金4}
]

我需要按字母顺序对列表进行排序,但也必须根据输入到文本框中的值的相关性进行排序(触发自动完成)



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

 管理财产基金2 

养恤金管理基金1

退休管理基金3

退休管理基金4

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

 退休管理基金3 

退休管理基金4

管理财产Fu nd 2

养老金管理基金1

如果输入基金,该订单将是正常的字母顺序:

 管理财产基金2 

养老金管理基金1

退休管理基金3

退休管理基金4

JavaScript或jQuery中是否有任何内置功能可以执行此操作?

解决方案

Array.prototype.sort 可以将一个函数作为比较器;我猜你需要在没有它的情况下对包含搜索词的每个字符串进行排序,并按字母顺序打破关系:

  var query ='管理'; 
fundList.sort(function(a,b)
{
var match_a = a.name.indexOf(query)> = 0;
var match_b = b.name。 indexOf(查询)> = 0;
if(match_a&&!match_b)
返回-1;
if(!match_a&& match_b)
return 1;
if(a.name< b.name)
返回-1;
if(a.name> b.name)
返回1;
返回0;
});

以此为出发点;而不是 String.prototype.indexOf 来计算一个字符串匹配我至少忽略大小写和间距的查询。


I have a JSON array of potential results for an autocomplete list.

The list is defined as:

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" }
]

I need to sort the list alphabetically, but it has to also be ordered by the relevance to the value entered into textbox (which triggers the automcomplete)

So for example, if the user types "Managed" into the textbox, the list above would be sorted as follows:

Managed Property Fund 2

Pension Managed Fund 1

Retirement Managed Fund 3

Retirement Managed Fund 4

If they typed "Retirement", the list would be sorted:

Retirement Managed Fund 3

Retirement Managed Fund 4

Managed Property Fund 2

Pension Managed Fund 1

If "Fund" was typed, the order would be normal alphabetical order:

Managed Property Fund 2

Pension Managed Fund 1

Retirement Managed Fund 3

Retirement Managed Fund 4

Is there any in-built functionality in JavaScript or jQuery which will do this?

解决方案

Array.prototype.sort can take a function as a comparator; I guess you need to sort every string containing a search term ahead of every string without it, and break ties alphabetically:

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;
});

Use this as a starting point; instead of String.prototype.indexOf to work out if a string matches the query I'd at the very least ignore case and spacing.

这篇关于JavaScript或jQuery可以在多个条件上对JSON数组进行排序吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆