Coffeescript forEach函数未定义

时间:2014-01-25 22:31:44

标签: javascript arrays coffeescript

我正在尝试使用CoffeeScript编写FizzBu​​zz程序,如下所示:

array = [1..100]

console.log(array.forEach(
  (value)->
   if value%3 is 0 and value%5 is 0
    return "fizzbuz"
   if value%3 is 0
    return "fizz"
   if value%5 is 0
    return "buzz"
   value
   ))

它不断返回undefined。为什么会这样?

2 个答案:

答案 0 :(得分:4)

forEach数组方法不返回结果数组。它为每个数组元素执行一次函数,并且它不返回任何内容。如果要返回结果数组,请使用map

console.log(array.map(
  (value)->
    if value%3 is 0 and value%5 is 0
      return "fizzbuzz"
    if value%3 is 0
      return "fizz"
    if value%5 is 0
      return "buzz"
    value
  ))

FIDDLE

答案 1 :(得分:4)

由于你正在使用CoffeeScript,简单的for loops are expressions导致数组,所以你可以说:

console.log(for value in array
    if value % 3 is 0 and value % 5 is 0
        "fizzbuz"
    else if value % 3 is 0
        "fizz"
    else if value % 5 is 0
        "buzz"
    else
        value
)

或者如果您真的想使用某个功能,请使用do创建SIF:

console.log(for value in array
    do (value) ->
        return 'fizzbuz' if value % 3 is 0 and value % 5 is 0
        return 'fizz'    if value % 3 is 0
        return 'buzz'    if value % 5 is 0
        return value
)

演示:http://jsfiddle.net/ambiguous/ENLfx/