JavaScript:reduce和map
我试图理解为什么这个函数的作者会对一个已经是map调用结果的对象调用reduce。这是一个主干应用程序的渲染功能(此处演示)。变量“messages”表示用户输入消息传递系统的消息集合。为什么作者会调用map,然后在map的结果上使用reduce,即“data”。我不明白reduce如何向数据变量添加任何新内容。如果你需要更多信息,请告诉我JavaScript:reduce和map,javascript,backbone.js,Javascript,Backbone.js,我试图理解为什么这个函数的作者会对一个已经是map调用结果的对象调用reduce。这是一个主干应用程序的渲染功能(此处演示)。变量“messages”表示用户输入消息传递系统的消息集合。为什么作者会调用map,然后在map的结果上使用reduce,即“data”。我不明白reduce如何向数据变量添加任何新内容。如果你需要更多信息,请告诉我 render: function() { var data = messages.map(function(message) { return me
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;
}
非常短的应用程序的完整源代码在这里,但我认为你不会需要它 正如@Pointy提到的,作者使用
reduce
是将数组连接成单个字符串(或
它是一个字符串)。然而,@Pointy也提到了基本原理
在这种情况下,使用reduce
不是很好
考虑到GitHub上的代码,有几种替代方案
你的情况更好。考虑到代码使用Backbone.js
messages
变量指向一个主干。集合
如果代码读的是大致相同的内容,那么代码就会更清晰
其中:
使用reduce
来连接字符串数组是一种过分的做法,而且
模糊了代码的意图。将map
与
Backbone.Collection
仅用于提取特定属性
从模型内部也多少模糊了意图
“map”函数返回一个数组;“reduce”将该数组折叠为标量。也就是说,代码的作者应该使用.join()
。谢谢您的帮助。然而,为了从某人那里得到更完整的答案,@pointy的评论只能部分回答这个问题。没有真正解释“为什么”部分。例如,在应用程序中,如果我将数据变量插入到文本(数据)中,它仍然可以正常工作,那么为什么需要减少?还是加入?对不起,我错了。如果我将数组传递给文本,它将不起作用。
render: function() {
var result = messages.pluck('content').join('\n')
$("#chatHistory").text(result);
return this;
}