Side navigation
Ticket #2616: map.diff
File map.diff, 1.3 KB (added by flesler, March 29, 2008 05:27PM UTC)
Proposal
Index: core.js
===================================================================
--- core.js (revision 5143)
+++ core.js (working copy)
@@ -1189,23 +1189,27 @@
return ret;
},
- map: function( elems, callback ) {
- var ret = [];
+ map: function( source, callback, target ) {
+ if( !target )
+ target = 'length' in source ? [ ] : { };
+
+ if( 'length' in target ){ //is it an array(-like) ? else a hash
+ var arr = true;
+ if( !target.concat )//fix array-like objects, or they will fail the final concat
+ target = jQuery.makeArray(target);
+ }
- // Go through the array, translating each of the items to their
+ // Go through the items, translating each of them to their
// new value (or values).
- for ( var i = 0, length = elems.length; i < length; i++ ) {
- var value = callback( elems[ i ], i );
+ jQuery.each( source , function( key, value ){
+ value = callback( value, key );
+
+ if ( value != null )
+ target[ arr ? target.length : key ] = value;
+ });
- if ( value !== null && value != undefined ) {
- if ( value.constructor != Array )
- value = [ value ];
-
- ret = ret.concat( value );
- }
- }
-
- return ret;
+ //Array.concat can receive arrays and non-arrays too
+ return arr ? target.concat.apply( [], target ) : target;
}
});
Download in other formats:
Original Format
File map.diff, 1.3 KB (added by flesler, March 29, 2008 05:27PM UTC)
Proposal
Index: core.js
===================================================================
--- core.js (revision 5143)
+++ core.js (working copy)
@@ -1189,23 +1189,27 @@
return ret;
},
- map: function( elems, callback ) {
- var ret = [];
+ map: function( source, callback, target ) {
+ if( !target )
+ target = 'length' in source ? [ ] : { };
+
+ if( 'length' in target ){ //is it an array(-like) ? else a hash
+ var arr = true;
+ if( !target.concat )//fix array-like objects, or they will fail the final concat
+ target = jQuery.makeArray(target);
+ }
- // Go through the array, translating each of the items to their
+ // Go through the items, translating each of them to their
// new value (or values).
- for ( var i = 0, length = elems.length; i < length; i++ ) {
- var value = callback( elems[ i ], i );
+ jQuery.each( source , function( key, value ){
+ value = callback( value, key );
+
+ if ( value != null )
+ target[ arr ? target.length : key ] = value;
+ });
- if ( value !== null && value != undefined ) {
- if ( value.constructor != Array )
- value = [ value ];
-
- ret = ret.concat( value );
- }
- }
-
- return ret;
+ //Array.concat can receive arrays and non-arrays too
+ return arr ? target.concat.apply( [], target ) : target;
}
});