CoffeeScript中的reduce() - 如何传递默认值?

时间:2016-02-02 18:20:54

标签: javascript coffeescript ecmascript-6 reduce

所以我最近一直在玩弄CoffeeScript。到目前为止,JS的过渡相当顺利,但现在我终于遇到了一个我无法解决的问题。

我已经获得了ES6的这篇文章:

function upcaseOddIndexes (arr, cha, ind) {
  if (ind % 2 === 0) {
     arr.push(cha.toUpperCase());
  } else {
     arr.push(cha);
  }
  return arr;
}

var string = "stringthing";
var upcasedString = string.split("")
                    .reduce((arr, cha, ind) => upcaseOddIndexes (arr, cha, ind), [])
                    .join("");

console.log(upcasedArray);

完成它的工作(返回一个带有奇数索引大写的字母的新字符串)就好了。 upcaseOddIndexes函数也没问题。但是如何将空数组作为initialValue传递给reduce()

我最好的猜测是

.reduce(arr, cha, ind -> upcaseOddIndexes arr, cha, ind) []

给了我

.reduce(arr, cha, ind(function() {
  return upcaseOddIndexes(arr, cha, ind);
 }))([])

,自arr is not defined以来,这无处可去。

我尝试添加更多的parens,逗号等等,但我总是遇到unexpected ,或类似的东西。

我已经在谷歌周围进行了很好的翻找,但到目前为止还没有找到答案。关于这个主题有this question,但它并没有真正帮助。

提前多多感谢=)

2 个答案:

答案 0 :(得分:1)

您需要在调用reduce时指定逗号:

.reduce ((arr, cha, ind) ->
  upcaseOddIndexes arr, cha, ind
), []

您将找到一个Javascript到Coffeescript转换器here

答案 1 :(得分:1)

您可以将(arr, cha, ind) => upcaseOddIndexes (arr, cha, ind)缩减为upcaseOddIndexes

string = "stringthing"
upcasedString = string
.split ""
.reduce upcaseOddIndexes, []
.join ""

转换为

var string, upcasedString;

string = "stringthing";

upcasedString = string.split("").reduce(upcaseOddIndexes, []).join("");

或没有减少:

string = "stringthing"
upcasedString = string
.split ""
.reduce (arr, cha, ind) ->
  upcaseOddIndexes arr, cha, ind
, []
.join ""

转换为

var string, upcasedString;

string = "stringthing";

upcasedString = string.split("").reduce(function(arr, cha, ind) {
  return upcaseOddIndexes(arr, cha, ind);
}, []).join("");