Avatar billede supermand69 Nybegynder
30. januar 2006 - 16:33 Der er 9 kommentarer og
1 løsning

slet identiske værdier i array

hvordan kan jeg slette identiske værdier i et array?
Avatar billede johan.o Nybegynder
30. januar 2006 - 16:52 #1
Noget i denne stil måske (hvis rækkefølgen i array'et er ligegyldig) :

<script type="text/javascript">

oArray = new Array("dig","mig","osto","mig","osto","dig");
oTemp = new Array();
oVal="";

oArray.sort();

for(i=0; i<oArray.length; i++) {
if(oVal!=oArray[i]) {
  oTemp.push(oArray[i]);
  oVal=oArray[i]; } }

for(i=0; i<oTemp.length; i++) {
document.write(oTemp[i]+"<br>"); }

</script>

Mvh. Johan
Avatar billede olebole Juniormester
30. januar 2006 - 16:54 #2
<ole>

<script type="text/JavaScript">
var aArr = ["en", "to", "tre", "en", "fire", "tre", "fem", "to"];
function cleanUpArr(a) {
    var o = {}, aa = [];
    for (var i=0; i<a.length; i++) {
        if (o[a[i]]) continue;
        o[a[i]] = 1;
        aa.push(a[i]);
    }
    o = null;
    return aa;
}

alert(cleanUpArr(aArr))
</script>

/mvh
</bole>
Avatar billede supermand69 Nybegynder
30. januar 2006 - 20:38 #3
det virker som det skal, men er ikke helt med på hvad der sker her?

    var o = {}, aa = [];
    for (var i=0; i<a.length; i++) {
        if (o[a[i]]) continue;
        o[a[i]] = 1;
        aa.push(a[i]);
    }

aa = [] er vel det samme som aa = new Array() ??
hvad er o = {} så ??

vil egentlig også gerne have forklare hvad der sker i den for løkke :) jeg vil gerne vide hvad de koder jeg bruger helt præcist gør i stedet for bare at copy/paste.. hehe
Avatar billede olebole Juniormester
31. januar 2006 - 10:59 #4
Der er tale om to shorthand constructors. '[]' opretter et array - og '{}' et objekt.
Et objekt, hvor alle properties har værdien '1' kaldes et 'hash-table'. Det er ekstremt hurtigt at søge i, hvorfor det er langt at foretrække fremfor en evt. søgning i et array.

Her er en kommenteret version af funktionen:

function cleanUpArr(a) {
  // Opret et lokalt objekt og et lokalt array:
    var o = {}, aa = [];
  // Gå det medsendte array igennem:
    for (var i=0; i<a.length; i++) {
      // Hvis den aktuelle værdi findes på objektet,
      // - så spring videre i loop'et
        if ( o[a[i]] ) continue;
      // Sæt den aktuelle værdi som property på objektet
      // - og sæt dens værdi til 1
        o[a[i]] = 1;
      // Indsæt den aktuelle værdi i det lokale array
        aa.push(a[i]);
    }
  // Slet objektet:
    o = null;
  // Returner det lokale array:
    return aa;
}

Jeg kan anbefale at læse denne artikel:
    http://www.eksperten.dk/artikler/227
Avatar billede olebole Juniormester
31. januar 2006 - 11:03 #5
En lille detalje er dog, at man ikke kan bruge et tal som property-navn. Derfor vil dette array ikke kunne renses med den viste funktion:
    var aArr = ["en", 2, "tre", "en", 4, "tre", "fem", 2];

En lille omskrivning klarer dog problemet:

function cleanUpArr(a) {
  // Opret et lokalt objekt og et lokalt array:
    var o = {}, aa = [];
  // Gå det medsendte array igennem:
    for (var i=0; i<a.length; i++) {
      // Hvis den aktuelle værdi med et 'x' foran findes på objektet,
      // - så spring videre i loop'et
        if ( o["x"+a[i]] ) continue;
      // Sæt den aktuelle værdi med et 'x' foran som property på objektet
      // - og sæt dens værdi til 1
        o["x"+a[i]] = 1;
      // Indsæt den aktuelle værdi i det lokale array
        aa.push(a[i]);
    }
  // Slet objektet:
    o = null;
  // Returner det lokale array
    return aa;
}
Avatar billede supermand69 Nybegynder
01. februar 2006 - 19:12 #6
hvad mener du så med det her?
"En lille detalje er dog, at man ikke kan bruge et tal som property-navn. Derfor vil dette array ikke kunne renses med den viste funktion:
var aArr = ["en", 2, "tre", "en", 4, "tre", "fem", 2];"

jeg har kun tal i mit array, men det virker fint som det skal :)

ang. det objekt.. det vil sige at det kun er nøglerne som er sat og alle værdier har 1?
Avatar billede supermand69 Nybegynder
01. februar 2006 - 19:15 #7
hov.. så ikke lige der blev smidt et x foran værdien ;)
Avatar billede olebole Juniormester
04. februar 2006 - 00:48 #8
Ja, alle properties i objektet er sat til værdien 1. Vi bruger det kun til at teste på ... og den slags objekter (associative arrays) er kanonhurtige at søge i  :)
Avatar billede supermand69 Nybegynder
15. februar 2006 - 19:14 #9
tak for hjælpen.. lav et svar :)

hvis du har tid og lyst må du gerne se lidt på den her
http://www.eksperten.dk/spm/683035
Avatar billede olebole Juniormester
15. februar 2006 - 19:19 #10
- selvtak  :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester