【问题标题】:sort array of objects based on string根据字符串对对象数组进行排序
【发布时间】:2015-10-20 10:29:20
【问题描述】:

假设我们有一个数组

var a = [
    { name: 'Tom', surname: 'TestAsIvanov' },
    { name: 'Kate', surname: 'Ivanova' },
    { name: 'John', surname: 'Alivanov' },
    { name: 'Ivan', surname: 'Ivanov' }
]

我需要根据提供的字符串按姓氏字段对该数组进行排序,例如:

  1. 对于'iva',模式数组应按如下方式排序
var newA = [
    { name: 'Ivan', surname: 'Ivanov' },
    { name: 'Kate', surname: 'Ivanova' },
    { name: 'John', surname: 'Alivanov' },
    { name: 'Tom', surname: 'TestAsIvanov' },
]
  1. 对于'a',模式数组应按如下方式排序
var newA = [
    { name: 'John', surname: 'Alivanov' },
    { name: 'Ivan', surname: 'Ivanov' },
    { name: 'Kate', surname: 'Ivanova' },
    { name: 'Tom', surname: 'TestAsIvanov' },
]

所以数组应该按提供的字符串模式排序。这怎么可能实现?

【问题讨论】:

  • newA.sort(function(a, b) { if (a.surname b.surname) return 1; return 0; } );
  • @murli2308 我需要根据提供的字符串按姓氏字段对这个数组进行排序你不明白的哪一部分? OP 想要某种过滤器,而不仅仅是简单的字母排序。
  • @DontVoteMeDown 它将直接工作我认为它不需要过滤器。我加了一个小提琴。 jsfiddle.net/murli2308/mn1f4c89

标签: javascript jquery arrays sorting


【解决方案1】:

我为此制作了一个简单的排序脚本。我不知道这是否是最好的方法,因为我必须使用两种sort() 方法,一种按字母顺序排序(taken from here),另一种模拟LIKE 'string%'(与 SQL 相比)来获取您的条件:

var queryString = "iva";

a = a.sort(function(a, b) {
    var s1 = a.surname.toUpperCase().indexOf(queryString.toUpperCase());
    var s2 = b.surname.toUpperCase().indexOf(queryString.toUpperCase());

    return (s1 > -1 && s1 > s2);
});

Fiddle with full code

至少它适用于您提供的两个示例,但我不确定它是否是您所需要的。

【讨论】:

    猜你喜欢
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多