0
在javascript中,我一直試圖通過兩個以上的鍵排序一個dics列表,但我遇到了問題。javascript:排序多個(超過2個)鍵字的列表
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 });
在排序之後,點擊[0] KEY1仍然爲「c」和我希望它是「一」,這意味着我將具有由第三排序。
PS:正如你所看到的key2和key3的值是一樣的,我不直接從key1排序,因爲在我真正的dics列表中有其他的dics,其中key2和key3看起來與這個例子不同。
在Python中,我只想做:
hits.sort(key=itemgetter('key2', 'key3',"key1"))
它適用於小試,但是當我試圖用許多DICS名單,結果沒有意義。
下面是部分數據:
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;
});
它適用於3個小小的清單,但是當我嘗試使用很多按鍵和麥克風時,我的真實情況並不奏效。我添加了第一篇文章,更多解釋 – user3780518
您是否將'>'反轉爲'<?因爲使用相同的輸入運行最後一個代碼片段會給我更新的預期場景。 –