Javascript: array prototype functies

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');

Leave a Reply

Your email address will not be published. Required fields are marked *