2015-10-09 102 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)