2011-07-20 9 views
3

私はデータベースからajax経由でマーカーをレンダリングするGoogleマップを持っています。マーカーの再描画(古いものが削除され、新しいものが描画されます)以外はうまくいきます。私がajaxから返すデータは、カンマで区切られた変数のテキスト形式です。私は、もはや適用されないデータを削除し、新しいデータを追加する効率的な方法を見つけようとしています。私はそれがマーカーに変わる前に純粋な形の意味であるので、データをajax投稿から戻すとすぐにこれを処理する最良の方法だと思います。Javascript/jquery Googleマーカーのリフレッシュ

誰もこれまでにこれをやった経験がありますか?私がLINQでそれをやっていたのであれば、私は2つのデータリストの間を除いて何らかの処理をします。私はjsがサイクルのより遅い部分であるので、jsでそれをすばやく行う方法がわかりません。

+0

"*適用されなくなったデータを削除する*"。 「*** ***該当なし」の基準は何ですか? –

+0

データ(マーカー)は、さまざまな基準に応じて追加および削除されます。 – Jeff

+0

ajaxは削除する項目のリストを返すことができますか? –

答えて

0

あり、問題の十分な詳細であってもよいが、以下を想定していない可能性があります

  1. アヤックスユニークマーカーIDのカンマ区切りのリストを持っているテキストを返します。
  2. あなたはリストまたは前のajax呼び出しの配列ユニークのマーカーIDを持っています。
  3. 削除するマーカーの一覧と、追加するマーカーの一覧が必要です。

これが当てはまらない場合は、質問を明確にして詳細を追加してください。 "Before"と "After"は良いでしょう。

そうでなければ、このようなアプローチは、動作するはず:

サンプルデータ:

var oldMarkers  = [ "Joe's Diner", 
         "Frank's Bail bonds", 
         "Precinct 9", 
         "Fence and Go" 
        ]; 
var newMarkerStr = "Precinct 9, Memorial Hospital," 
        + " Frank's Bail bonds, Mary's shyster"; 
//-- Split on commas; strip out boundary whitespace. 
var newMarkers  = newMarkerStr.split (/(?:\s*,\s*)+(?!(?:\s*,\s*))/); 


プロセスようなので:

var toAdd   = newMarkers.slice(); //-- Copy the array. 

var toDelete  = $.grep (oldMarkers, function (marker) { 
         var K = $.inArray (marker, newMarkers); 
         if (K == -1) { 
          //-- Old item not in the list, delete it. 
          return true; 
         } 
         else { 
          /*-- Old item is in the new list, mark it as 
           to be removed from the "add" list. 
          */ 
          toAdd[K] = -666; 
         } 
         return false; 
        }); 
toAdd    = $.map (toAdd, function (marker) { 
         return (marker == -666) ? null : marker; 
        }); 


See it live at jsFiddle.

+0

ありがとうございます – Jeff

+0

ようこそ。喜んで助けてください。 –