我试图拿起一些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 :(得分: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
,并且在循环完成后,b
中只剩下最后的a
。
如果要将理解结果本身分配给变量,则需要括号:
a = (b for b in c)
或者,在你的情况下
val = (el['b'] for el in testarr)