Newsgroup: it.comp.lang.javascript
Titolo: Controllare gli elementi di un array

Sono entrato un pò in confusione, per così poco direte voi, ma
effettivamente non ci sto capendo più niente; allora ora provo a spiegarmi:
Devo mettere a video gli elementi di un array precedentemente creato in
maniera dinamica(al suo interno a volte si creano elementi con lo stesso
contenuto) ; fin qui nessun problema, quando li devo mettere a video però
vorrei evitare di scrivere elementi uguali ergo dovrei controllare se
l'elemento da scrivere è uguale ad uno di quelli già scritti e in questo
caso non scriverlo, l'unica soluzione che mi è venuta è questa, secondo voi
è corretta, lo chiedo perchè mi genera un errore ma siccome ho modificato
anche un'altra porzione di codice, prima di controllare vorrei sapere se
almeno il procedimento logico è corretto e se a voi viene in mente qualche
altra strada da percorrere magari più semplice
Questo è il codice:
for (j=0;j<risultato.length;j++) {
     for (a=0;a<risultato.length;a++) {
              if (risultato[j] != risultato[a])    {
                         document.write(risultato[j]+"<br>");
                          }
             }
}

 
Così non ti funzione perché scrive il valore corrispondente a "j" ogni 
volta che non è uguale al valore corrispondente ad "a", quindi ti fa una 
sfilza di a*j-[numero dei duplicati] righe.
Una prima soluzione che mi viene è tener traccia dei valori già 
stampati, io ho provato con delle semplici lettere che riempiono una 
stringa, ma puoi anche riempire un array:
<SCRIPT>
<!--
var risultato = new Array("a","b","c","b","d","e","f","b","c","g","h");
var v = "";
for (j=0;j<risultato.length;j++)
	{
	if (v.indexOf(risultato[j])==-1)
		{
		v+=risultato[j];
		document.write(j+" "+risultato[j]+" -- "+v+"<BR>");
		}
	}
//-->
</SCRIPT>
In pratica per ogni ciclo j controllo che l'elemento NON sia già 
presente in v, se non c'è lo aggiungo e lo scrivo.
-- 
Ciao, Riccardo
------------------------------------------------------------------------
WebMaster: ----> 
http://www.jsdir.com
 <---- (aka 
http://www.jspoint.it
)
              All the JavaScript you need
------------------------------------------------------------------------
               Nessun traguardo è abbastanza lontano.
------------------------------------------------------------------------

Niente di fatto anche col tuo metodo mi scrive gli elementi uguali e molte
volte
Io ho provato anche questo, magari può dare uno spunto, come risultato però
mi da un unico elemento
for (j=0;j<risultato.length;j++) {
conto=0;
for (a=0;a<j;a++) {
if (risultato[j] != risultato[a]) conto++
}
if (conto == 0) document.write(risultato[j]+"<br>");
}

Ho fatto anche quest'altro tentativo ma il risultato è uguale
for (j=0;j<risultato.length;j++) {
conto=0;
for (a=0;a<j;a++) {
(risultato[j] != risultato[a]) ? conto++ : conto=0;
if (conto != 0) document.write(risultato[j]+"<br>");
}
}

 Ho fatto anche quest'altro tentativo ma il risultato č uguale
Non puň funzionare. La scrittura deve essere fatta al termine di tutti i
controlli.
Prova cosě:
for (j=0; j<risultato.length; j++) {
    flag=1;
    for (a=0; a<j; a++) {
        if (risultato[j] == risultato[a]) {
            flag = 0;
            break;        // č inutile effettuare altri controlli
        }
    }
    if (flag)    // se non sono stati trovati risultati uguali
        document.write(risultato[j]+"<br>");
}
Maurizio.

Niente da fare; non funge e cmq era simile a quello da me precedentemente
descritto
Grazie

, 
serg...@inwind.it
 says...

Questo non può funzionare. E' una prova che avevo fatto anch'io di primo 
acchito, e non dovrebbe proprio scriverti gli elementi duplicati, 
neanche la prima volta.
Fammi vedere il codice che usi, lo script che ti ho mandato l'ho provato 
e funziona perfettamente, ma, ripeto, io lavoravo con una stringa, 
magari non stai implementando bene lo script mio ai tuoi dati.


Dopo senza esagerare una 40ina di tentativi avevo ormai rinunciato, poi ho
roguardato il tuo post e col seguente codice funziona (incrocio le dita
perchè oggi l'ho detto già molte volte, per poi ricredermi)
var v = "";
for (j=0;j<risultato.length;j++)
{
if (v.indexOf(risultato[j])==-1)
{
v+=risultato[j];
document.write(risultato[j]+"<BR>");
}
}
Grazie per l'aiuto

Un'ultima cosa, se per esempio gli elementi di risultato contangono dei
numeri?
Io sono arrivato solo a questo
 var v = "";
 for (j=0;j<risultato.length;j++)
 {
var ce=new array
a=0
ce[a]=risultato[j]+"?"
 if (v.indexOf(ce[a])==-1)
 {
 v+=ca[a];
 document.write(risultato[j]+"<BR>");
 }
a++;
 }
non l'ho ancora testato e cmq vi viene in mente qualcosa di più semplice?

Mi sa che per fretta ho scritto un pň di fesserie
Questo č il codice
var v = "";
var ce=new array;
a=0;
for (j=0;j<risultato.length;j++)
{
ce[a]=risultato[j]+"?"
if (v.indexOf(ce[a])==-1)
{
v+=ce[a];
document.write(risultato[j]+"<BR>");
}
a++;
}
la domanda perň č la stessa; vi viene in mente qualcosa di piů semplice?

 la domanda perň č la stessa; vi viene in mente qualcosa di piů semplice?
Magari pensandoci un po' su qualcosa si tira fuori, comunque se 
funziona...
 :-))
-- 
Ciao, Riccardo
------------------------------------------------------------------------
WebMaster: ----> 
http://www.jsdir.com
 <---- (aka 
http://www.jspoint.it
)
              All the JavaScript you need
------------------------------------------------------------------------
               Nessun traguardo č abbastanza lontano.
------------------------------------------------------------------------