2012-03-14 1 views
0

私はJavascriptを使用して作成したオブジェクトの配列を持っています。オブジェクトは地図レイヤーで、さまざまなプロパティが関連付けられています。作成時に、それらは配列にプッシュされます。以下は、私が何をしたいのか簡単な例オブジェクトプロパティの配列を検索し、見つかったオブジェクトの最初の出現を非表示にする

var activeLayers = []; 
var mapLayer1 = new mapLayer(); 
mapLayer1.name = 'roads'; 
mapLayer1.class = 'infrastucture'; 
mapLayer1.type = 'line'; 
activeLayers.push(mapLayer1); 

var mapLayer2 = new mapLayer(); 
mapLayer2.name = 'cities'; 
mapLayer2.class = 'infrastucture'; 
mapLayer2.type = 'point'; 
activeLayers.push(mapLayer2); 

var mapLayer3 = new mapLayer(); 
mapLayer3.name = 'counties'; 
mapLayer3.class = 'boundaries'; 
mapLayer3.type = 'polygon'; 
activeLayers.push(mapLayer3); 

var mapLayer4 = new mapLayer(); 
mapLayer4.name = 'zoningDistricts'; 
mapLayer4.class = 'political'; 
mapLayer4.type = 'polygon'; 
activeLayers.push(mapLayer4); 

であることはタイプの複数の層==同時に表示されるポリゴンを許可しないように、私のマップを強制しています。私は配列 'activeLayers'を繰り返し、type == polygon.length> 1ならマップから最も古いものを削除したいと思います。地図から層を除去するポリゴンは、上記アレイmapLayer3で

mapLayer3.hide(); 

の関数とで達成され、mapLayer4前に添加し、マップから隠されるであろう。

ありがとうございます。

答えて

1

これを試してください。

var prevPoly = null; 
for(var i = 0;i < activeLayers.length;i++){ 
    if(activeLayers[i].type == 'polygon'){ 
     if(prevPoly){ 
      prevPoly.hide(); 
      break; 
     } 
     else{ 
      prevPoly = activeLayers[i]; 
     } 
    } 
} 

}

+0

これはOPの例で機能しますが、配列に3番目のポリゴンがある場合はどうなりますか?彼は "マップに同時に複数のタイプのレイヤー==ポリゴンを表示させないようにマップを強制したい"としていますが、2番目のポリゴンが見つかった(そして隠されている)ときに常にループを終了します。 – bfavaretto

+0

OPの説明地図から最も古いものを削除したいと思います。私はすべての地図を削除する必要があるとは言いません。 – ShankarSangoli

+0

私はもう一度質問を読んだが、あなたはそれについて正しい。私の答えは間違っていた。しかし、ループが壊れているかどうかはわかりません。 – bfavaretto

1

は間違いなくちょうど可視マップのタイプのキーと値のペアを使用して、活性層を格納するオブジェクトを使用する必要があります。あなたは、マップレイヤを見えるようにすると、あなたは

function activeLayers = {}; 

function showMapLayer(layer) { 
    activeLayers[layer.type] = mapLayer; 
} 

function hideMapLayer(layer) { 
    activeLayers[layer.type] = null; 
} 

を表示するマップにオブジェクトのプロパティを設定します。その後のために...ループで

var layer; 
for (layer in activeLayers) 
{ 
    if (layer && activeLayers.hasOwnProperty(layer)) { 
     // this is an active layer, do something with it 
    }  
} 

を使用して目に見える層を反復処理することができます私はこれが層を追加した順序を保持していないことを認識していますので、オブジェクトをガイドとして常に使用することができます。 (例で更新します)

関連する問題