簡體   English   中英

JavaScript:縮小和映射

[英]JavaScript: reduce and map

我試圖理解為什么這個函數的作者會在已經是map調用結果的對象上調用reduce。 這是來自主干應用程序的渲染功能(演示位於http://fire-camp.heroku.com/ )。 變量“ messages”表示用戶輸入到消息傳遞系統中的消息的集合。 作者為什么要調用map,然后減少map的結果,即“數據”。 我不明白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

正如@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來連接字符串數組是過大的,並且掩蓋了代碼的意圖。 mapBackbone.Collection一起使用只是為了從模型內部提取特定屬性,這在某種程度上也模糊了代碼的意圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM