Hab’ mich noch zu einer kleinen Verbesserung verleiten lassen…
Object.extend(Array.prototype, {
filter : function(){
var args = $A(arguments), fnc = args.shift(), tmpNew = new Array();
if(typeof(fnc)!='function'){throw new TypeError()};
this.each(function(element){
args.unshift(element);
if (fnc.apply(this,args)) {
tmpNew.push(element)
}
args.shift();
});
return tmpNew;
}
});
Damit sind jetzt u.a. weitere Paramater für die Testfunktion zulässig:
[1,2,3,4,5,6,7,8].filter(function(element,a,b){return element > a && element < b;},3,6);
// => [4, 5]
[1,2,3,4,5,6,7,8].filter(function(element){return element > 6;});
// => [7,8]
[1,2,3,4,5,6,7,8].filter(1,3,6);
// => TypeError
['aa',1,9,{},[],'bb'].filter(function(e,a){return typeof(e)==a},'number').filter(function(e,a){return e > a},8)
// => [9]

