0

この関数の作成者が、すでに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

4

1 に答える 1

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

于 2012-09-28T07:11:34.353 に答える