Toon posts:

[Javascript] array controleren op dubbele waarden

Pagina: 1
Acties:
  • 167 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ben niet echt superieur in het maken van Javascripts, en loop dan ook tegen het volgende probleem aan; is er een gemakkelijk methode om te controleren of een array dubbele waarden bevat? Met PHP, iets waar ik dan weer wél goed in ben, bestaat er de functie in_array, maar voor Javascript kan ik geen vergelijkbare methode vinden. Bestaat deze wel?

Of zit er niets anders op dan het 'handmatig' doorlopen van de array?
Kleine tip zou handig zijn - alvast bedankt. Ga ik weer snel terug naar de buren..

[ Voor 10% gewijzigd door Verwijderd op 21-09-2005 14:25 ]


  • frickY
  • Registratie: Juli 2001
  • Laatst online: 24-04 11:26
Voor zover ik weet kent Javascript een dergelijke functie niet, en zit er inderdaad neits anders op dan de functie zelf te maken. Maar dat is redelijk eenvoudig;
JavaScript:
1
2
3
4
5
6
7
function in_array(haystack, needle) {
  for(i in haystack) {
    if(haystack[i] == needle)
      return true;
  }
  return false;
}


Toch?

Verwijderd

Efficienter is om eerst de array te sorteren. Dan hoef je items alleen met hun voorganger te vergelijken om te controleren of ze dubbel zijn.

Zie ook:
[rml][ Actionscript 2.0] Uniek Array[/rml]

[ Voor 29% gewijzigd door Verwijderd op 21-09-2005 14:32 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:56

crisp

Devver

Pixelated

Gecko ondersteund vanaf versie 1.8 met javascript 1.5 de indexOf method met een optionele fromIndex parameter: http://developer.mozilla....nce:Objects:Array:indexOf

voor andere browserts is dit wel handig:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
if (!Array.prototype.indexOf)
{
    Array.prototype.indexOf = function(searchElement, fromIndex)
    {
        var l = this.length, i = 0;
        if (fromIndex)
        {
            i = fromIndex;
            if (i < 0)
            {
                i += l;
                if (i < 0) i = 0;
            }
        }

        while (i < l)
        {
            if (this[i] === searchElement) return i;
            i++;
        }

        return -1;
    }
}

if (!Array.prototype.lastIndexOf)
{
    Array.prototype.lastIndexOf = function(searchElement, fromIndex)
    {
        var i = this.length;
        if (!fromIndex) fromIndex = 0;
        else if (fromIndex < 1)
        {
            fromIndex += i;
            if (fromIndex < 0) fromIndex = 0;
        }

        while (i-- > fromIndex)
        {
            if (this[i] === searchElement) return i;
        }

        return -1;
    }
}

function in_array(needle, ar)
{
    for (var el in ar)
    {
        if (ar[el] === needle) return el;
    }

    return false;
}

;)

Intentionally left blank