in_array für Javascript

Vom 31. März 2007, 11:38 Uhr

Nachdem mir die vielen Funktionen über Google zu kompliziert waren, hier die PHP-Funktion in_array für JavaScript:

function in_array(item,arr) {
for(p=0;p<arr.length;p++) if (item == arr[p]) return true;
return false;
}


Kommentare

  1. Richard schrieb am 14.04.2007:

    mal ehrlich, war diese errungenschaft jetzt so erwähnenswert?

  2. Dodwin schrieb am 14.04.2007:

    Nunja... Über Google fandest du meist nur sehr viel längere Funktionen.
    Dabei geht's auch so kurz und simpel...
    Sowas braucht man immer wieder. Warum also nicht veröffentlichen?

  3. Jeena Paradies schrieb am 03.05.2007:

    Ich hätte das eher "the JavaScipt way" mit der erweiterung des Array Objektes gelöst. So wie PHP das macht ist es furchtbar.

    Array.prototype.in_array = function(needle) {
    for(var i=0; i < this.length; i++) if(this[ i] === needle) return true;
    return false;
    }

    var a = [1,2,3,4,5];
    alert(a.in_array(4));
    alert(a.in_array(6));

  4. quendolin schrieb am 13.09.2007:

    Hallo dodwin, super Seite! Die Funktion ist wirklich praktisch. Ich würde dir aber empfehlen, dich mal hinzusetzen und etwas mit CSS zu beschäftigen, wenn du hier deine Web-Arbeiten zur Schau stellst. Im IE6 sollte es schon funktionieren ;))
    Links ist der blaue Rand versetzt, der Text steht über den schwarzen Strich in der Mitte und rechts in der Mitte ist überhaupt kein Schatten!
    Screenshot

  5. Jeena Paradies schrieb am 13.09.2007:

    Wer den IE nutzt, der will es ja nicht anders, quendolin.

  6. Dodwin schrieb am 13.09.2007:

    Also diese Webseite hier habe ich im Firefox, Opera, IE 7, IE 6 und sogar IE 5 getestet.
    Ich kann das Problem mit dem verschobenen Rändern nicht nachvollziehen...
    Welche genau Version (eventl. Update?) benutzt du?
    Irgendwelche IE-Spielereichen dran (Toolbars oder was es für IE alles gibt?)

    Und Jeena stimmt schon was du sagst, aber ich denke dass so eine Webseite auch im IE funktionieren sollte ;)

  7. quendolin schrieb am 13.09.2007:

    Nö, frisch installiertes WinXP SP2 mit IE6. Keine Toolbars. Allerdings keine Standardauflösung, da in virtueller Maschine laufend

  8. Tom schrieb am 12.03.2008:

    Array.prototype.in_array = function(needle) {
    for(var i=0; i < this.length; i++) if(this[ i] === needle) return true;
    return false;
    }

    var a = [1,2,3,4,5];
    alert(a.in_array(4));
    alert(a.in_array(6));

    Das funktioniert bei mir nicht.
    Scheinbar wird das Arrayobject als solches überschrieben, weil ich keinerlei Funktionen des Array-Objects verwenden kann, und diverse Daten nach der Definition der Funktion weg sind
    ...?

  9. Tom schrieb am 12.03.2008:

    Array.prototype.in_array = function(needle) {
    for(var i=0; i < this.length; i++) if(this[ i] === needle) return true;
    return false;
    }

    var a = [1,2,3,4,5];
    alert(a.in_array(4));
    alert(a.in_array(6));

    Ich habs !!
    Dieses Beispiel funktioniert bei mehrdimensionalen Array, so wie ich das verwenden will nicht,
    also

    Hansi = new Array;
    Hansi[0] = new Array;
    Hansi[1] = new Array;

  10. Jeena Paradies schrieb am 12.03.2008:

    naja eigentlich sollte das schon funktionieren solange du zwei Arrays vergleichen möchtest:

    var a = [ [1,2,3], [4,5,6]]; // dein mehrdimmensionales Array
    alert( a.in_array( [4,5,6] ) ); // sollte true ergeben

  11. Dodwin schrieb am 12.03.2008:

    Klappt leider nicht so wie du es dir vorstellst Jeena.
    if ([1,2] == [1,2]) ...
    => gibt nicht true aus. Kann ich aber nicht wirklich nachvollziehen.


    Zur Funktion bei mehrdimensionalen Arrays bräuchte man eine rekursive Funktion:

    Array.prototype.in_array = function(needle) {
    for(var i=0; i < this.length; i++)
    if(this[ i] == needle) return true;
    else if (this[ i].in_array) { // Überprüft ob es ein Array ist, mittels der eigenen Funktion
    if (this[ i].in_array(needle)) return true; // Rekursiver Aufruf, return-Wert wird überprüft
    }
    return false;
    }

    var a = [1,2,[3,4],5,6];
    alert(a.in_array(1)); // gibt für die Werte 1 bis 6 true aus.

  12. Tom schrieb am 12.03.2008:

    Naja relativ stressig
    Was ist wenn man wieder eine Dimension mehr brauch, müsste man die Funktion erneut umschreiben.
    Schlussendlich ist diese Variante

    function in_array(item,arr) {
    for(p=0;p<arr.length;p++) if (item == arr[p]) return true;
    return false;
    }

    vielleicht garnicht so schlecht.

    lg aus Wien

  13. Dodwin schrieb am 12.03.2008:

    Nein die oben genannte Funktion muss nicht mehr umgeschrieben werden. Sie ruft sich bei mehrdimensionalen Arrays selber auf.

    D.h.:

    var a = [1,2,[3,4],5,6,[7,[8,[9],10,[11,[12]]]]];
    alert(a.in_array(12));

    gibt true für 1-12 aus. Weitere Dimensionen sind ebenfalls kein Problem.

Die Kommentare sind für diesen Eintrag geschlossen.