From c72371f71474cbd6e2318c8ad909a2f92dcb915c Mon Sep 17 00:00:00 2001 From: Dan Heberden Date: Mon, 4 Apr 2011 23:59:54 -0700 Subject: [PATCH] Improve speed of $.map with object support (-5% previous speed) and improve .length detection --- src/core.js | 15 +++++++-------- src/sizzle | 2 +- test/qunit | 2 +- test/unit/core.js | 4 ++-- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/core.js b/src/core.js index 49c191b9..c9b560ae 100644 --- a/src/core.js +++ b/src/core.js @@ -704,16 +704,15 @@ jQuery.extend({ return ret; }, - // arg is for internal usage only + // arg is for internal usage only map: function( elems, callback, arg ) { var value, ret = [], - i = 0, + i = 0, length = elems.length, - // process .length if it's just an object member - isArray = length !== undefined && ( elems[ length - 1 ] || jQuery.isArray( elems ) ); - + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || jQuery.isArray( elems ) ) ; + // Go through the array, translating each of the items to their - // new value (or values). if ( isArray ) { for ( ; i < length; i++ ) { value = callback( elems[ i ], i, arg ); @@ -723,8 +722,8 @@ jQuery.extend({ } } - // Go thorugh every key on the object, - } else { + // Go thorugh every key on the object, + } else { for ( key in elems ) { value = callback( elems[ key ], key, arg ); diff --git a/src/sizzle b/src/sizzle index ef19279f..f12b9309 160000 --- a/src/sizzle +++ b/src/sizzle @@ -1 +1 @@ -Subproject commit ef19279f54ba49242c6461d47577c703f4f4e80e +Subproject commit f12b9309269ba7e705a99efe099f86ed1fe98d58 diff --git a/test/qunit b/test/qunit index cc8460c7..d404faf8 160000 --- a/test/qunit +++ b/test/qunit @@ -1 +1 @@ -Subproject commit cc8460c7b44f023c4f84ab1810b72bf6c6ee4542 +Subproject commit d404faf8f587fcbe6b8907943022e6318dd51e0c diff --git a/test/unit/core.js b/test/unit/core.js index 08d80400..c15884fc 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -625,7 +625,7 @@ test("map()", function() { q("ap","ap","ap"), "Single Map" ); - + //for #2616 var keys = jQuery.map( {a:1,b:2}, function( v, k ){ return k; @@ -636,7 +636,7 @@ test("map()", function() { return v; }); equals( values.join(""), "12", "Map the values from a hash to an array" ); - + // object with length prop var values = jQuery.map( {a:1,b:2, length:3}, function( v, k ){ return v;