JavaScript:缩小和映射

时间:2012-09-28 04:04:47

标签: javascript backbone.js

我试图理解为什么这个函数的作者会调用对已经是map映射调用结果的对象的reduce。这是一个来自骨干应用程序的渲染功能(这里演示http://fire-camp.heroku.com/)。变量“messages”表示用户进入消息传递系统的消息的集合。为什么作者会调用地图然后减少地图的结果,即'数据'。我不明白reduce如何为数据变量添加任何新东西。如果您需要更多信息,请与我们联系。

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

1 个答案:

答案 0 :(得分:1)

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

鉴于GitHub上的代码,有几种替代方案 更好。考虑到代码使用Backbone.js messages变量指向Backbone.Collection这个 如果它读取的话,代码会更清楚 这个:

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

使用reduce加入一个字符串数组是过度的 模糊了代码的意图。同时使用map Backbone.Collection只是为了榨取一个特定的属性 从里面的模特也有点模糊了意图 代码。