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.