我试图理解为什么这个函数的作者会调用对已经是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
答案 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
只是为了榨取一个特定的属性
从里面的模特也有点模糊了意图
代码。