合并一组静态项目很容易:
var finalValue = configValue || "default"; # JavaScript
finalValue = configValue ? "default" # CoffeeScript
但是有没有一种简单的方法来合并一个未知长度的数组?我能想到的最简单的是这个(CoffeeScript):
coalesce = (args) -> args.reduce (arg) -> arg if arg?
coalesce [1, 2] # Prints 1
这对于简单的列表很好,但是
- 理想情况下
coalesce
应该迭代arguments
,但它不支持reduce
,并且 - 如果数组包含函数,您可能希望返回它们的返回值而不是函数本身(这是我的用例)。
基于 Guffa 的解决方案,这里有一个 CoffeeScript 版本:
coalesce = (args) -> args[0]() ? coalesce args[1..]
测试coffee
:
fun1 = ->
console.log 1
null
fun2 = ->
console.log 2
2
fun3 = ->
console.log 3
3
coalesce [fun1, fun2, fun3]
印刷
1 # Log
2 # Log
2 # Return value