hel*_*loB -1 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
Run Code Online (Sandbox Code Playgroud)
我的警报只显示-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
Run Code Online (Sandbox Code Playgroud)
接下来,你的数组理解是错误的.你做到了这个:
a = b for b in c
Run Code Online (Sandbox Code Playgroud)
那是完全相同的
for b in c
a = b
Run Code Online (Sandbox Code Playgroud)
每个元素依次分配给a,并且只有最后一个元素在循环完成后b保留a.
如果要将理解结果本身分配给变量,则需要括号:
a = (b for b in c)
Run Code Online (Sandbox Code Playgroud)
或者,在你的情况下
val = (el['b'] for el in testarr)
Run Code Online (Sandbox Code Playgroud)