From e38f074d14fd65b3f8b0e1bd7956cd75b3dafe2b Mon Sep 17 00:00:00 2001 From: Dan Heberden Date: Mon, 21 Mar 2011 08:39:53 -0700 Subject: [PATCH] jQuery.map to conform with style guidelines - improved size/DRY code --- src/core.js | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/core.js b/src/core.js index 1077d38c..a0dd7b5b 100644 --- a/src/core.js +++ b/src/core.js @@ -706,29 +706,31 @@ jQuery.extend({ // arg is for internal usage only map: function( elems, callback, arg ) { - var ret = [], - value, + var ret = [], value, i = 0, length = elems.length, // same object detection used in jQuery.each, not full-proof but very speedy. isObj = length === undefined; - - if ( isObj ) { - for ( key in elems ) { - value = callback( elems[ key ], key, arg ); - + + // the work for the loops - run elems[x] through callback + inLoop = function( key ) { + value = callback( elems[ key ], key, arg ); + if ( value != null ) { ret[ ret.length ] = value; } } - } else { - // Go through the array, translating each of the items to their - // new value (or values). - for ( var i = 0; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - if ( value != null ) { - ret[ ret.length ] = value; - } + // Go thorugh every key on the object + if ( isObj ) { + for ( key in elems ) { + inLoop( key ); + } + + // Go through the array, translating each of the items to their + // new value (or values). + } else { + for ( ; i < length; i++ ) { + inLoop( i ); } }