Según la especificación de Javascript 1.6, los objetos tipo Array
disponen de un método llamado every(),
que nos permite hacer que por cada elemento de un Array
ejecutemos una acción, devolviéndonos false
en caso de que la acción que pasamos no devuelva true
en alguno de los elementos.
Para los navegadores que incorporan este método, existe un sistema para extender los Array
con este método.
if (!Array.prototype.every){
Array.prototype.every = function(fun /*, thisp*/){
var len = this.length;
if (typeof fun != "function")
throw new TypeError();
var thisp = arguments[1];
for (var i = 0; i < len; i++){
if (i in this && !fun.call(thisp, this[i], i, this))
return false;
}
return true;
};
}
También podemos añadirla mediante el uso de extend()
de la siguiente forma.
extend({
every: function(fun /*, thisp*/) {
var len = this.length;
if (typeof fun != "function")
throw new TypeError();
var thisp = arguments[1];
for (var i = 0; i < len; i++)
{
if (i in this &&
!fun.call(thisp, this[i], i, this))
return false;
}
return true;
}
},Array.prototype);
Yo hace unos días, haciendo unas pruebas para una cosilla que estoy desarrollando implementé mi propia versión, sin conocer la existencia de esta y la funcionalidad es diferente ya que interpreté el every()
como su traducción al castellano cada()
, y mi implementación aplica una funcionalidad cada X elementos.
extend({
every: function(num, fun){
if (typeof fun != "function") throw new TypeError();
for (var i = 0; i < this.length; i++) {
if (i in this && i%num == 0) fun.call(arguments[1], this[i], i)
}
return this;
}
}, Array.prototype);
De esta forma, podemos usarlo de la siguiente forma.
[1,2,3,4,5,6].every(2, function(el){
alert(el);
});
5 comentarios, 0 referencias
+
#