Javascript Array-Handling: inArray, löschen, kopieren

Suchen im Array

Sowas wie eine in_array Funktion gibts bekanntermaßen nicht in Javascript. Man kann sich das natürlich nachbauen, indem man durch das ganze Array iteriert und jeden Wert vergleicht – aber eher uncool!

Wers noch nicht wusste: indexOf klappt nicht nur mit Strings, sondern auch mit Arrays:

["foo", "bar", 1, 2, 3].indexOf("bar"); //1
["foo", "bar", 1, 2, 3].indexOf("foobar"); //-1

Geht leider nicht mit dem IE <= Version 6, wer den wirklich noch unterstützen muss, kann zumindest den Array-Prototyp erweitern und sowas verwenden:

Array.prototype.contains = function(obj) {
    var i = this.length;
    while (i--) {
        if (this[i] === obj) {
            return true;
        }
    }
    return false;
}
Handling ist dann:
["foo", "bar", 1, 2, 3].contains("foobar"); //false
["foo", "bar", 1, 2, 3].contains("bar"); //true
Vorsicht dabei allerdings, weil beim Iterieren über das array mittels for/in – Loop der prototype mitkommt, wenn man dies nicht mittels hasOwnProperty abfängt.

Selektives Löschen von Elementen des Arrays

Was nimmt man so klassischerweise? null setzen?

var arr = ["foo", "bar", 1, 2, 3];
arr[2] = null;
console.log(arr); //["foo", "bar", null, 2, 3]
console.log(arr.length); //5

Tut genau das, was man erwartet: Das Array behält seine Länge, nur der Wert wird eben null gesetzt. Oft nicht das gewünschte Ergebnis.

Aber vielleicht tuts ja delete?

var arr = ["foo", "bar", 1, 2, 3];
delete arr[2];
console.log(arr); //["foo", "bar", undefined, 2, 3]
console.log(arr.length); //5

Hm, toll – nun also undefined und nicht mehr null, sonst keine Änderung. Aber jetzt!

var arr = ["foo", "bar", 1, 2, 3];
arr.splice(2, 1);
console.log(arr); //["foo", "bar", 2, 3]
console.log(arr.length); //4

So war das doch geplant!

Arrays kopieren

Schamlos verweise ich auf meinen Post „Javascript: Arrays kopieren“, wo die Thematik ganz anständig dargestellt ist.

Weitere Posts:

Dieser Beitrag wurde unter Javascript, webdev veröffentlicht. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.