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.