所以我最近一直在玩弄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,但它并没有真正帮助。
提前多多感谢=)
答案 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("");