javascript:按多个(2个以上)键对dict列表进行排序

javascript:按多个(2个以上)键对dict列表进行排序,javascript,list,sorting,dictionary,Javascript,List,Sorting,Dictionary,在javascript中,我一直试图按两个以上的键对DIC列表进行排序,但我遇到了一些问题 hits = [ {'key1': 'c', 'key2': 'c1', 'key3': 10}, {'key1': 'a', 'key2': 'c1', 'key3': 10}, {'key1': 'b', 'key2': 'c1', 'key3': 10} ] //sorting by two keys hits.sort(function(a,b) { return

在javascript中,我一直试图按两个以上的键对DIC列表进行排序,但我遇到了一些问题

hits = [
  {'key1': 'c', 'key2': 'c1', 'key3': 10},
  {'key1': 'a', 'key2': 'c1', 'key3': 10},
  {'key1': 'b', 'key2': 'c1', 'key3': 10}
  ]

//sorting by two keys
hits.sort(function(a,b) {
       return a.key2 != b.key2? (a.key2 < b.key2? -1 : 1) :
 a.key3 - b.key3 });
它适用于一个小测试,但当我尝试使用包含许多DIC的列表时,结果没有意义

以下是部分数据:

Key 2     Key3       key1
chr1           11       chr1_K892
chr1           11       chr1_K761
chr2           10       chr2
下面是排序后的情况

Key 2     Key3       key1
chr2           10        chr2
chr1           11        chr1_K892
chr1           11        chr1_K761
我认为应该是:

Key 2     Key3       key1
chr1           11        chr1_K761
chr1           11        chr1_K892
chr2           10        chr2
还有其他键涉及,但他们不应该是一个问题,我想,因为我订购了3个键

有效的解决方案:

        hits.sort(function(a, b) {
            if(a.key2 < b.key2)
                return -1;
            if(a.key2 > b.key2)
                return 1;
            if(a.key3 < b.key3)
                return -1;
            if(a.key3 > b.key3)
                return 1;
            if(a.key1 < b.key1)
                return -1;
            if(a.key1 > b.key1)
                return 1;

            return 0;
        });

您的代码声明根据键2的值按递增顺序排序。如果两个对象的键2的值相同,它将基于键3进行排序 代码中根本没有引用键1。 如果要根据关键字按递增顺序排序,可以执行以下操作:

hits = [
    {'key1': 'c', 'key2': 'c1', 'key3': 10},
    {'key1': 'a', 'key2': 'c1', 'key3': 10},
    {'key1': 'b', 'key2': 'c1', 'key3': 10}
];
hits.sort(function (a, b) {
    return a.key1!=b.key1 ? (a.key1 < b.key1 ? -1 : 1) : 0;
});

这是否符合您的目的?

它适用于一个包含3个DIC的小列表,但当我使用许多钥匙和DIC尝试我的真实案例时,它不起作用。我在第一篇文章中添加了更多的解释,你把>倒过来了吗
hits = [
    {'key1': 'c', 'key2': 'c1', 'key3': 10},
    {'key1': 'a', 'key2': 'c1', 'key3': 10},
    {'key1': 'b', 'key2': 'c1', 'key3': 10}
];
hits.sort(function (a, b) {
    return a.key1!=b.key1 ? (a.key1 < b.key1 ? -1 : 1) : 0;
});
hits = [
    {'key1': 'c', 'key2': 'c1', 'key3': 10},
    {'key1': 'a', 'key2': 'c1', 'key3': 10},
    {'key1': 'b', 'key2': 'c1', 'key3': 10}
];
hits.sort(function (a, b) {
    return a.key2 != b.key2 ? a.key2 > b.key2 : (a.key3 != b.key3 ? a.key3 > b.key3 : (a.key1 != b.key1 ? a.key1 > b.key1 : 0));
});