【发布时间】:2017-04-15 02:50:52
【问题描述】:
在 javascript 中,我一直在尝试通过两个以上的键对 dics 列表进行排序,但我遇到了问题。
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 });
排序后,hits[0] key1 仍然是'c',我希望它是'a',这意味着我必须按三分之一排序。
PS:如您所见,key2 和 key3 的值是相同的,我不直接从 key1 排序,因为在我的真实 dic 列表中还有其他 dic,其中 key2 和 key3 看起来与此示例不同。
在python中我会简单地做:
hits.sort(key=itemgetter('key2', 'key3',"key1"))
它适用于小型测试,但是当我尝试使用包含许多 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;
});
【问题讨论】:
标签: javascript list sorting dictionary