【问题标题】:How can I sort this JavaScript object based on the name and then order by relevance?如何根据名称对这个 JavaScript 对象进行排序,然后按相关性排序?
【发布时间】:2011-08-23 15:17:31
【问题描述】:

我之前问过以下问题:Can JavaScript or jQuery sort a JSON array on multiple criteria?

我想我可能在问这个问题时犯了一个错误,因为我指定了一个 JavaScript 数组,而不是一个对象,而且这种差异似乎是我遇到困难的根源。

我的页面上存在以下由 JSON 定义的对象,用于自动完成功能:

var fundList = [
    { "name": "Pension Managed Fund 1", "id": 21, "cid": "N0", "dupId": 53 },
    { "name": "Managed Property Fund 2", "id": 407, "cid": "N0", "dupId": 58 },
    { "name": "Retirement Managed Fund 3", "id": 640, "cid": "N0", "dupId": 111 },
    { "name": "Retirement Managed Fund 4", "id": 752, "cid": "N0", "dupId": 115 }
]

我需要根据它们的名称按字母顺序对这些项目进行排序,但它们还必须按照与输入到文本框中的值的相关性进行排序(这会触发自动完成)

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

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

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

Managed Property Fund 2

Pension Managed Fund 1

Retirement Managed Fund 3

Retirement Managed Fund 4

我需要做什么才能根据我指定的名称和条件对其进行排序?我尝试按照上一个问题中的建议使用fundList.sort(new function(a, b),但这会返回函数未定义错误。

【问题讨论】:

  • This 没用?
  • 您好,不。根据fundList.sort(new function(a, b) ,这是行不通的。

标签: javascript json sorting


【解决方案1】:
var fundList = [
        { "name": "Pension Managed Fund 1", "id": 21, "cid": "N0", "dupId": 53 },
        { "name": "Managed Property Fund 2", "id": 407, "cid": "N0", "dupId": 58 },
        { "name": "Retirement Managed Fund 3", "id": 640, "cid": "N0", "dupId": 111 },
        { "name": "Retirement Managed Fund 4", "id": 752, "cid": "N0", "dupId": 115 }
    ],
    textEntered = 'Managed';

fundList.sort(function(a, b)
{
    ai = a.name.indexOf(textEntered);
    bi = b.name.indexOf(textEntered);
    if(ai>=0 && bi<0) return -1;
    else if(bi>=0 && ai<0) return 1;
    else return a.name - b.name;
});

【讨论】:

  • 如果两个比较项都有匹配的字符串,则最后一个 else 将无法按预期工作。不应该是else return ai - bi吗?
【解决方案2】:

您应该认真阅读 JavaScript 中的 how to sort arrays

这是一种方法:

var fundList = [
        { "name": "Pension Managed Fund 1", "id": 21, "cid": "N0", "dupId": 53 },
        { "name": "Managed Property Fund 2", "id": 407, "cid": "N0", "dupId": 58 },
        { "name": "Retirement Managed Fund 3", "id": 640, "cid": "N0", "dupId": 111 },
        { "name": "Retirement Managed Fund 4", "id": 752, "cid": "N0", "dupId": 115 }
    ],
    textEntered = 'Managed';

fundList.sort(function(a, b)
{
    var aStart = a.name.match(new RegExp('^'+textEntered, 'i')) || [],
        bStart = b.name.match(new RegExp('^'+textEntered, 'i')) || [];

    if ( aStart.length != bStart.length ) return bStart.length - aStart.length;

    else return a.name > b.name ? 1 : -1;
});

http://jsfiddle.net/txJVB/3/

【讨论】:

    猜你喜欢
    • 2010-11-24
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 2019-01-04
    • 1970-01-01
    相关资源
    最近更新 更多