Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:reduce和map_Javascript_Backbone.js - Fatal编程技术网

JavaScript:reduce和map

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

我试图理解为什么这个函数的作者会对一个已经是map调用结果的对象调用reduce。这是一个主干应用程序的渲染功能(此处演示)。变量“messages”表示用户输入消息传递系统的消息集合。为什么作者会调用map,然后在map的结果上使用reduce,即“data”。我不明白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;
  }

非常短的应用程序的完整源代码在这里,但我认为你不会需要它

正如@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;
}