CoffeeScript按键排序对象数组

时间:2015-10-09 20:06:51

标签: javascript 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。我做错了什么?

1 个答案:

答案 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)