0

我试图理解为什么这个函数的作者会在一个已经是调用 map 的结果的对象上调用 reduce。这是来自主干应用程序的渲染功能(此处为演示http://fire-camp.heroku.com/)。变量“messages”表示用户输入消息系统的消息的集合。为什么作者会调用 map 然后对 map 的结果进行归约,即“数据”。我不明白 reduce 如何为 data 变量添加任何新内容。如果您需要更多信息,请与我们联系。

render: function() {
    var data = messages.map(function(message) { return message.get('content') + 'n'});
    var result = data.reduce(function(memo,str) { return memo + str }, '');
    $("#chatHistory").text(result);
    return this;
  }

非常短的应用程序的完整源代码在这里,但我认为您不需要它。https://github.com/ryandotsmith/fire-camp

4

1 回答 1

1

正如@Pointy 提到的,作者使用的原因reduce 是将数组连接成单个字符串(或将其减少为字符串)。不过,正如@Pointy 所提到的,reduce在这种情况下使用的理由并不是很好。

鉴于 GitHub 上的代码,有几个更好的替代方案。考虑到代码使用 Backbone.js 并且messages变量指向 aBackbone.Collection此代码,如果它读取以下内容会更清楚:

render: function() {
  var result = messages.pluck('content').join('\n')
  $("#chatHistory").text(result);
  return this;
}

reduce用于连接字符串数组是矫枉过正并且模糊了代码的意图。map与 一起使用 只是Backbone.Collection为了从内部模型中提取特定属性也有点模糊了代码的意图。

于 2012-09-28T07:11:34.353 回答