2015-10-09 153 views
-1

我想要拿起一些CoffeeScript,但堅持按鍵排序對象數組。下面是我的嘗試:CoffeeScript按鍵排序對象數組

sortByKey = (array, key) -> 
    array.sort((a,b) -> a[key] < b[key] ? -1 : a[key] > b[key] ? 1 : 0) 

testarr = [{i: 5, b:7}, {i:9, b:15}, {i:-4, b:-99}] 
sortByKey(testarr, 'i') 
val = el['b'] for el in testarr 
alert val 

我的警報只顯示-99,而我本來期望看到-99,7,15,什麼是我做錯了什麼?

+0

'sortByKey = sortByKey(testarr,「我')' – Tushar

+0

對於數字,很簡單:'array.sort((a,b) - > a [key] - b [key])' – dandavis

回答

6

CoffeeScript中沒有三元運算符。檢查你編譯的JavaScript,你將能夠立即看到這一點。

你需要放棄你的嵌套三元運營商(這是一個不好的做法,即使在支持它們的語言),並使用if/else

sortByKey = (array, key) -> 
    array.sort (a,b) -> 
    if a[key] < b[key] 
     -1 
    else if a[key] > b[key] 
     1 
    else 
     0 

接下來,你的陣列的理解是錯誤的。你已經做到了這一點:

a = b for b in c 

這等同於

for b in c 
    a = b 

每個元素依次分配給a,只有最後ba循環完成後離開。

如果你想分配的理解本身給一個變量的結果,您需要括號:

a = (b for b in c) 

或者,你的情況

val = (el['b'] for el in testarr)