按字母顺序排序多个键上的javascript对象

时间:2015-06-10 11:41:40

标签: javascript jquery sorting jquery-ui-sortable

这是我的js对象:

var data = [
    { id: 7, name: "test1", sector: "A01" },
    { id: 7, name: "test2", sector: "C03" },
    { id: 8, name: "test4", sector: "B02" },
    { id: 8, name: "test5", sector: "A01" },
    { id: 8, name: "test6", sector: "C03" },
    { id: 7, name: "test3", sector: "B02" },
];

我希望按ID排序此对象,然后按扇区排序,如下所示:

7,test1,A01
7,test3,B02
7,test2,C03
8,test5,A01
8,test4,B02
8,test6,C03

我已尝试thenBy.js,代码为here,但结果为

7,test1,A01
7,test2,C03
7,test3,B02
8,test4,B02
8,test5,A01
8,test6,C03

如何解决?

如果您看不到输出,请转到左侧面板上的External Resources并为Firebug添加以下链接:getfirebug.com/firebug-lite-debug.js

2 个答案:

答案 0 :(得分:2)

我已经看过你的小提琴,而你正试图减去字符串,这会产生NaN s,这些字母无法真正用于排序。< / p>

如果您在比较字符串时尝试使用><,它就可以正常工作。

示例:

firstBy(function (v1, v2) { return v1.id < v2.id ? -1 : (v1.id > v2.id ? 1 : 0); })
  .thenBy(function (v1, v2) { return v1.sector > v2.sector; });

这将是您正在寻找的结果。

答案 1 :(得分:0)

只需连接字符串,就可以在没有firstBy().thenBy构造的情况下完成。 sort函数的参数如下所示:

function (v1, v2) { return v1.id + v1.sector < v2.id + v2.sector ? -1 : (v1.id + v1.sector> v2.id + v2.sector ? 1 : 0); }

这是fixed fiddle