bored with something to array convertion ? map them !
I'm rewriting my JSL to include by default inside my next project.
This project will include automatically a lot of standard JS 1.5 methods or functions, and Array.map is one of those.
While I'm testing some proto performances, I've thought about a really simple way to switch from an array or from a node list (getElementsByTagName) with a simple, fast and single line of function.
and that's all, do You like it ?
As first point, You need FireFox 1 or greater (or Mozilla if You prefere) or this short piece of code:
Then You have "everything You need" to get quickly every iterable element.
These are just two examples
These nice trick should be used with forEach method too.
Stop for and while loops, each them !
... and sure, You need forEach prototype too ...
I suppose every other JS 1.5 Array method should be cool enought to work with DOM nodes too ... do You agree ?
Are thinking about performances ? Well guys, quite the same of generic loops, even faster (works in core) with every FireFox !!!
This project will include automatically a lot of standard JS 1.5 methods or functions, and Array.map is one of those.
While I'm testing some proto performances, I've thought about a really simple way to switch from an array or from a node list (getElementsByTagName) with a simple, fast and single line of function.
// old example version
// function _A(a){return [].map.call(a,function(a){return a})};
// new version, Daniel suggest, faster and doesn't require any prototype !
function _A(a){return [].slice.call(a)};
and that's all, do You like it ?
As first point, You need FireFox 1 or greater (or Mozilla if You prefere) or this short piece of code:
if(!Array.prototype.map) Array.prototype.map = function(callback){
for(var i = 0, j = this.length, result = new Array(j), self = arguments[1], u; i < j; i++) {
if(this[i] !== u)
result[i] = callback.call(self, this[i], i, this);
};
return result;
};
Then You have "everything You need" to get quickly every iterable element.
These are just two examples
function sort(){
return _A(arguments).sort().join("<br />");
};
document.writeln(sort("Luke", "Jabba", "Fenner"));
document.writeln(sort("c", "a", "b"));
var firstScript = _A(document.getElementsByTagName("script")).shift();
alert(firstScript);
var allUnorderedList = _A(document.getElementsByTagName("ul"));
alert(_A(null).constructor === Array); // true ;-)
These nice trick should be used with forEach method too.
Stop for and while loops, each them !
function changeLinks(onclick){
[].forEach.apply(document.getElementsByTagName("a"),
function(link){
link.onclick = onclick;
});
};
changeLinks(function(){
window.open(this.href, "");
return false;
});
... and sure, You need forEach prototype too ...
I suppose every other JS 1.5 Array method should be cool enought to work with DOM nodes too ... do You agree ?
Are thinking about performances ? Well guys, quite the same of generic loops, even faster (works in core) with every FireFox !!!
Comments
Post a Comment