0

underscore.js の各関数を使用して、リスト内の各項目の文字列置換を呼び出すだけの関数があります。(実際には一対のリスト):

//ベースオブジェクト
バケット = {
  カウンター: ["stats.REPLACE.msg_delivered",
              "stats.REPLACE.delivery_failed"],
  タイマー: ["stats.timers.REPLACE.msg_delivery_timer.median",
            "stats.timers.REPLACE.msg_delivery_timer.mean",
            "stats.timers.REPLACE.msg_delivery_timer.std",
            "stats.timers.REPLACE.msg_delivery_timer.upper"]
};

//問題の関数
_getNodeTargets = 関数 (ノード) {
  var ターゲット = バケット;
  _.each(targets.counters, function(bucket) { バケット = バケット.replace("REPLACE", ノード);});  
  _.each(targets.timers, function(bucket) { バケット = バケット.replace("REPLACE", ノード);});
  ターゲットを返します。
}

each 関数に足を踏み入れると、文字列が置き換えられ、バケットに割り当てられていることがわかります。ただし、リターンをヒットすると、ターゲットオブジェクトは変更されず、各文字列に REPLACE が残っています。

ばかげたことをしていることは間違いありませんが、何らかの理由でそれを見ることができません。

前もって感謝します!

4

1 に答える 1

4

_.eachコールバックを与える他の引数を使用する必要があります。

_.each(targets.counters,
      function(bucket, i, target) {
          target[i] = bucket.replace("REPLACE", node);
      });

これは、bucketそれ自体が文字列への参照であるためです。その参照を独自のものに置き換えても、コレクションに保存されている参照は置き換えられません (変更されていないバージョンを指し続けます)。対照的にtarget[i]、コレクションに移動して更新するため、コールバックが返された後でも変更が表示されます。

于 2013-07-12T21:01:27.300 に答える