【问题标题】:reduce() in CoffeeScript - how do I pass a default value?CoffeeScript 中的 reduce() - 如何传递默认值?
【发布时间】:2016-05-11 16:54:41
【问题描述】:

所以我最近一直在玩弄 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 在这个话题上,但它并没有真正帮助。

提前非常感谢 =)

【问题讨论】:

  • 从 ES6 到 CS 似乎是倒退了一步。
  • @FelixKling CS 编译为 ES6,所以没有多大意义

标签: javascript coffeescript ecmascript-6 reduce


【解决方案1】:

您需要在对reduce的调用结束时指定逗号:

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

你会发现一个 Javascript 到 Coffeescript 的转换器 here

【讨论】:

  • 但是[] 必须传递给reduce 函数。
  • @FelixKling 对于其他到达这里的人,一旦转译成 javascript,它将在 reduce 函数内结束。
【解决方案2】:

您可以将(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("");

【讨论】:

  • 你可以减少... 呵呵。双关语。严肃地说,这是一个很好的回应——它直接回答了这个问题,但也提供了一个进一步简化的解决方案,解决了作者最终想要完成的事情。回答得很好。
  • 你会在生活中做伟大的事情。谢谢。
猜你喜欢
  • 2015-11-12
  • 2011-02-12
  • 2017-11-08
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多