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.