CoffeeScript 中的 reduce() - 如何传递默认值?
reduce() in CoffeeScript - how do I pass a default value?
所以我最近一直在研究 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
。
我试过添加更多括号、逗号等等,但我总是遇到 unexpected ,
或类似的东西。
我已经对 Google 进行了很好的翻找,但到目前为止还没有找到答案。有关于该主题的 this question,但它并没有真正帮助。
非常感谢 =)
您需要在对 reduce
的调用结束时指定逗号:
.reduce ((arr, cha, ind) ->
upcaseOddIndexes arr, cha, ind
), []
您会找到一个 Javascript 到 Coffeescript 的转换器 here
您可以将 (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("");
所以我最近一直在研究 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
。
我试过添加更多括号、逗号等等,但我总是遇到 unexpected ,
或类似的东西。
我已经对 Google 进行了很好的翻找,但到目前为止还没有找到答案。有关于该主题的 this question,但它并没有真正帮助。
非常感谢 =)
您需要在对 reduce
的调用结束时指定逗号:
.reduce ((arr, cha, ind) ->
upcaseOddIndexes arr, cha, ind
), []
您会找到一个 Javascript 到 Coffeescript 的转换器 here
您可以将 (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("");