繁体   English   中英

CoffeeScript按键对对象进行排序

[英]CoffeeScript sort array of objects by key

我试图拿起一些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。我做错了什么?

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM