Skip to content
Permalink
Browse files

Rewrote .merge() (faster and less obtuse now). Fixed #5610.

  • Loading branch information
jeresig committed Dec 10, 2009
1 parent f25eedf commit 715d1c5a30cc4986018bbf063713f14c34c3e258
Showing with 16 additions and 15 deletions.
  1. +11 −14 src/core.js
  2. +5 −1 test/unit/core.js
@@ -567,23 +567,20 @@ jQuery.extend({
},

merge: function( first, second ) {
var pos, i = second.length;
var i = first.length, j = 0;

// We have to get length this way when IE & Opera overwrite the length
// expando of getElementsByTagName
if ( i && i.nodeType ) {
for ( i = 0; second[i]; ++i ) {}
}

pos = i + first.length;

// Correct length for non Arrays
first.length = pos;

while ( i ) {
first[ --pos ] = second[ --i ];
if ( typeof second.length === "number" ) {
for ( var l = second.length; j < l; j++ ) {
first[ i++ ] = second[ j ];
}
} else {
while ( second[j] !== undefined ) {
first[ i++ ] = second[ j++ ];
}
}

first.length = i;

return first;
},

@@ -711,7 +711,7 @@ test("jQuery.each(Object,Function)", function() {
});

test("jQuery.makeArray", function(){
expect(15);
expect(17);

equals( jQuery.makeArray(jQuery('html>*'))[0].nodeName.toUpperCase(), "HEAD", "Pass makeArray a jQuery object" );

@@ -744,6 +744,10 @@ test("jQuery.makeArray", function(){
equals( jQuery.makeArray(/a/)[0].constructor, RegExp, "Pass makeArray a regex" );

ok( jQuery.makeArray(document.getElementById('form')).length >= 13, "Pass makeArray a form (treat as elements)" );

// For #5610
same( jQuery.makeArray({'length': '0'}), [], "Make sure object is coerced properly.");
same( jQuery.makeArray({'length': '5'}), [], "Make sure object is coerced properly.");
});

test("jQuery.isEmptyObject", function(){

1 comment on commit 715d1c5

@rkatic

This comment has been minimized.

Copy link
Contributor

rkatic commented on 715d1c5 Dec 10, 2009

Well, your version is faster only in the special (very rare) case of overwritted length property. In all other cases, my one was little faster.
Also you are not considering the case obj.length = new Number(N) - but yeah it is not so relevant I suppose.

Please sign in to comment.
You can’t perform that action at this time.