Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22

Discussione: array e ciclo for

  1. #1

    array e ciclo for

    ragazzi non mi riesce un ciclo for, io ho un array cosi:

    codice:
    //qui c'è un ciclo for che incrementa l'array 
    //Mostra markers
    for (i=0; i < data.marker.length; i++) { 
    
    var marker = etc//
    
    markers[data.marker[i].id_cat] = new Array();
    markers[data.marker[i].id_cat][i] = marker;
    }
    
    
    
    
    //elimina array
    var id_delete =   //è sempre uguale a [data.marker[i].id_cat];
    for (i = 0; i < markers[id_delete].length; i++ ) {		
    markers[id_delete][i].setMap(null);
    }

    Perchè se è un singolo marker si cancella, se sono 2 o di più no?

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    23
    il codice che hai scritto funziona solo se elimini il primo marker dell'array markers, perchè per i successivi chiami il metodo setMap su un undefined e quindi solleverai un'eccezione javascript

    il problema è che l'approccio al problema è completamente sbagliato (meglio diretto che girarci attorno, spero apprezzi )

    1) quando riempi markers usi la proprietà id_cat come indice.. se ad esempio hai un solo marker e la sua prop id_cat è 65 crei un array lungo 65 di cui 64 sono undefined --> cosa pessima

    2) perchè invece di assegnare marker direttamente a una posizione dell'array markers, crei un nuovo array per quella posizione (hai creato una matrice così) per assegnarci poi marker alla posizione i? oltre a spreco di memoria e peggiorare le performance ti stai solo complicando la vita!

    prova a seguire queste due dritte

  3. #3
    hai ragione grazie mille del suggerimento e che mi sto affacciando ora a js. Tu intendevi dire una cosa del genere:

    codice:
    var markers = new array();
    
    for (i=0; i < data.marker.length; i++) { 
    
    var marker = etc//
    
    markers[i] = new Array();
    markers[i] = marker;
    }
    
    
    //elimino array
    for (i = 0; i < markers.length; i++ ) {
    markers[i].setMap(null);
    }
    Il problema è che cosi non so cosa cancella, cioè se io volessi rimuovere solo quelli con id_cat = 5? cosi non potrei ho sbaglio?

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    23
    ci sei quasi

    codice:
    var markers = new Array();
    
    for (i=0; i < data.marker.length; i++) { 
    
    var marker = etc//
    
    // qui sbagli, gli stai dicendo che per ogni posizione dell'array markers crei un'altro array.. 
    // inoltre questa riga è "annullata" dalla successiva perchè la sovrascrivi. 
    // Quindi si può eliminare e basta (io te la commento)
    // markers[i] = new Array();
    markers[i] = marker;
    }
    
    //rimettiamo l'id_delete
    var id_delete =   //è sempre uguale a [data.marker[i].id_cat];
    
    //elimino array
    for (i = 0; i < markers.length; i++ ) {
    // adesso in questo ciclo basta controllare se id_delete corrisponde 
    // all'id_cat del marker e agire di conseguenza
    if(id_delete == markers[i].id_cat)
    markers[i].setMap(null);
    }
    ti consiglio di debuggare il codice che scrivi con qualche browser (io uso chrome ed è tutto molto intuitivo).. in modo da vedere cosa fa il tuo codice, sicuramente riuscirai ad evitare questi errorini

  5. #5
    ho provato come dici tu, ma non va., tu markers[i].id_cat id_cat da dove lo prendi?
    ho fatto come dici tu:

    codice:
    for (i=0; i < data.test.length; i++) { 
    		  	
    		  	 var image =  new google.maps.MarkerImage(
              	 ''+data.test[i].marker+'',
              	 new google.maps.Size(32,37),
              	 new google.maps.Point(0,0),		
              	 new google.maps.Point(16,35)			
              );
              		  	
              	var marker = new google.maps.Marker({
              	position: new google.maps.LatLng(data.test[i].latitude, data.test[i].longitude), 
              	animation: google.maps.Animation.DROP,
                    map: map,
                    title: data.test[i].nome,
                    icon: image
                });
    
                //markers[i] = new Array();
                markers[i] = marker;
                
                //var id_delete =  [data.marker[i].id_cat];
                
                
    }//for
    
    
    
    for (i = 0; i < markers.length; i++) {
    if(id_delete == markers[i].id_cat) {
    markers[i].setMap(null);
     }
     }

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    23
    Hai ragione, non funzionava.
    Non funzionava perchè ipotizzavo che marker avesse la proprietà id_cat.

    Visto che non è così, gliel'aggiungiamo noi:

    codice:
    var markers = new Array();
    
    for (i=0; i < data.marker.length; i++) { 
    
    var marker = etc//
    
    markers[i] = marker;
    markers[i].id_cat = data.marker[i].id_cat; 
    
    }
    
    var id_delete =   //è sempre uguale a [data.marker[i].id_cat];
    
    //elimino array
    for (i = 0; i < markers.length; i++ ) {
    if(id_delete == markers[i].id_cat)
    markers[i].setMap(null);
    }

  7. #7
    adesso in parte funziona, cioè se io cecco una checkbox mi mostra il marker e se lo disattivo mi elimina il marker. Ma se invece io cecco tutte le checkbox e poi inizio a disattivarle senza senso, mi inizia a eliminare marker che non appartengono a quella categoria.

    non so se hai capito cosa intendo.

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    23
    così, senza vedere niente è difficile dirti dov'è l'errore

    immagino che alla delete arrivi l'id sbagliato..

  9. #9
    asp che ti faccio l'esempio, purtroppo ho tutto in locale non so come posso fartelo vedere:

    - <input class="chek" type="checkbox" value="1" />Alberghi

    - <input class="chek" type="checkbox" value="2" />Case

    - <input class="chek" type="checkbox" value="3" />Ville


    appena clicco Alberghi mi vengono mostrati i marker alberghi, se disattivo la checkbox mi elimina tutti i marker degli alberghi. Fino a qui giusto.


    Ma se clicco Ville, Alberghi, Case, se disattivo la checkbox mi elimina i markers a caso, non lo capisco il perchè.

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    23
    mi metti anche il codice dell'event handler? (il pezzo di codice che si "accorge" quando cecchi)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.