In navolging van de post “Javascript: string prototype functies” nu ook een aantal varianten voor Arrays.
Functies
contains()
bekijk of waarde in array bestaat.
Array.prototype.contains = function(search) { for (var i = 0; i < this.length; i++) { if (this[i] == search) { return true; } } return false; }
lastIndexOf()
geef de laatste positie van de waarde in de array. Indien waarde niet bestaat is het resultaat -1.
Array.prototype.lastIndexOf = function(search) { var i = this.length; while(i--) { if (this[i] == search) { return i; } } return -1; }
removeValue()
verwijder waarde uit een array.
Array.prototype.removeValue = function(search) { var pos = this.indexOf(search); if (pos != -1) { this.splice(pos, 1); } }
unique()
geeft een array terug met enkel unieke waardes. Is afhankelijk van eerder besproken contains()
methode.
Array.prototype.unique = function() { var newArray = []; for (i = 0; i < this.length; i++) { if (!newArray.contains(this[i])) { newArray.push(this[i]); } } return newArray; }
compare()
vergelijkt een de array met een opgegeven array. Heeft een extractie functie nodig om te bekijken of er wellicht arrays in de elementen van de array staan. Deze methode houdt rekening met de volgorde.
function isArray(obj) { return obj.constructor == Array; } Array.prototype.compare = function(otherArr) { if (this.length != otherArr.length) return false; for (var i = 0; i < otherArr.length; i++) { if (isArray(this[i])) { if (this[i].compare(otherArr[i])) { return false; } } if (this[i] != otherArr[i]) { return false; } } return true; }
map()
voert opgegeven functie uit op alle waarden van de array.
Array.prototype.map = function(func) { var a = new Array(); for (var i = 0; i < this.length; i++) { a.push(func(this[i])); } return a; }
filter()
levert een nieuwe array met enkel de waarden waarbij de opgegeven functie true retourneert.
Array.prototype.filter = function(func) { var a = new Array(); for (var i = 0; i < this.length; i++) { if (func(this[i])) { a.push(this[i]); } } return a; }
Gebruik
var newCars = new Array('mazda', 'hyundai', 'bmw'); var oldCars = new Array('mazda', 'bmw'); alert(newCars.contains('hyundai')); //-> returns true alert(oldCars.contains('hyundai')); //-> returns false var extraCars = new Array('mazda', 'opel', 'mazda', 'hyundai', 'opel'); alert(extraCars.lastIndexOf('mazda')); //-> returns 2 alert(newCars.removeValue('bmw')); //-> returns Array('mazda', 'hyundai') alert(extraCars.unique()); //-> returns Array('mazda', 'opel', 'hyundai') var sameCars = new Array('mazda', 'hyundai', 'bmw'); alert(sameCars.compare(newCars)); //-> returns true var sameCars = new Array('mazda', 'bmw', 'hyundai'); alert(sameCars.compare(newCars)); //-> returns false var ratings = new Array(4, 6, 8); alert(ratings.map(function(x) { return x / 2; })); //-> returns Array(2, 3, 4); alert(newCars.filter(function(x) { return x != 'mazda' })); //-> returns Array('hyundai', 'bmw');