mirror of
https://github.com/jquery/jquery.git
synced 2026-04-20 03:01:22 -04:00
Ref #14313: Optimize 1.x jQuery.merge for size.
(cherry picked from commitsc75c9a8ebbf66d53c856)
This commit is contained in:
committed by
Richard Gibson
parent
5cd6868365
commit
ceb5b4c9a3
18
src/core.js
18
src/core.js
@@ -629,15 +629,17 @@ jQuery.extend({
|
||||
},
|
||||
|
||||
merge: function( first, second ) {
|
||||
var l = second.length,
|
||||
i = first.length,
|
||||
j = 0;
|
||||
var len = +second.length,
|
||||
j = 0,
|
||||
i = first.length;
|
||||
|
||||
if ( typeof l === "number" ) {
|
||||
for ( ; j < l; j++ ) {
|
||||
first[ i++ ] = second[ j ];
|
||||
}
|
||||
} else {
|
||||
while ( j < len ) {
|
||||
first[ i++ ] = second[ j++ ];
|
||||
}
|
||||
|
||||
// Support: IE<9
|
||||
// Workaround non-numeric length overrides of otherwise arraylike objects (e.g., NodeLists)
|
||||
if ( len !== len ) {
|
||||
while ( second[j] !== undefined ) {
|
||||
first[ i++ ] = second[ j++ ];
|
||||
}
|
||||
|
||||
@@ -905,25 +905,65 @@ test("jQuery.map", function() {
|
||||
});
|
||||
|
||||
test("jQuery.merge()", function() {
|
||||
expect(8);
|
||||
expect( 10 );
|
||||
|
||||
deepEqual( jQuery.merge([],[]), [], "Empty arrays" );
|
||||
deepEqual(
|
||||
jQuery.merge( [], [] ),
|
||||
[],
|
||||
"Empty arrays"
|
||||
);
|
||||
|
||||
deepEqual( jQuery.merge([ 1 ],[ 2 ]), [ 1, 2 ], "Basic" );
|
||||
deepEqual( jQuery.merge([ 1, 2 ], [ 3, 4 ]), [ 1, 2, 3, 4 ], "Basic" );
|
||||
deepEqual(
|
||||
jQuery.merge( [ 1 ], [ 2 ] ),
|
||||
[ 1, 2 ],
|
||||
"Basic (single-element)"
|
||||
);
|
||||
deepEqual(
|
||||
jQuery.merge( [ 1, 2 ], [ 3, 4 ] ),
|
||||
[ 1, 2, 3, 4 ],
|
||||
"Basic (multiple-element)"
|
||||
);
|
||||
|
||||
deepEqual( jQuery.merge([ 1, 2 ],[]), [ 1, 2 ], "Second empty" );
|
||||
deepEqual( jQuery.merge([],[ 1, 2 ]), [ 1, 2 ], "First empty" );
|
||||
deepEqual(
|
||||
jQuery.merge( [ 1, 2 ], [] ),
|
||||
[ 1, 2 ],
|
||||
"Second empty"
|
||||
);
|
||||
deepEqual(
|
||||
jQuery.merge( [], [ 1, 2 ] ),
|
||||
[ 1, 2 ],
|
||||
"First empty"
|
||||
);
|
||||
|
||||
// Fixed at [5998], #3641
|
||||
deepEqual( jQuery.merge([ -2, -1 ], [ 0, 1, 2 ]), [ -2, -1 , 0, 1, 2 ],
|
||||
"Second array including a zero (falsy)");
|
||||
deepEqual(
|
||||
jQuery.merge( [ -2, -1 ], [ 0, 1, 2 ] ),
|
||||
[ -2, -1 , 0, 1, 2 ],
|
||||
"Second array including a zero (falsy)"
|
||||
);
|
||||
|
||||
// After fixing #5527
|
||||
deepEqual( jQuery.merge([], [ null, undefined ]), [ null, undefined ],
|
||||
"Second array including null and undefined values");
|
||||
deepEqual( jQuery.merge({ length: 0 }, [ 1, 2 ] ), { length: 2, 0: 1, 1: 2},
|
||||
"First array like");
|
||||
deepEqual(
|
||||
jQuery.merge( [], [ null, undefined ] ),
|
||||
[ null, undefined ],
|
||||
"Second array including null and undefined values"
|
||||
);
|
||||
deepEqual(
|
||||
jQuery.merge( { length: 0 }, [ 1, 2 ] ),
|
||||
{ length: 2, 0: 1, 1: 2 },
|
||||
"First array like"
|
||||
);
|
||||
deepEqual(
|
||||
jQuery.merge( [ 1, 2 ], { length: 1, 0: 3 } ),
|
||||
[ 1, 2, 3 ],
|
||||
"Second array like"
|
||||
);
|
||||
|
||||
deepEqual(
|
||||
jQuery.merge( [], document.getElementById("lengthtest").getElementsByTagName("input") ),
|
||||
[ document.getElementById("length"), document.getElementById("idTest") ],
|
||||
"Second NodeList"
|
||||
);
|
||||
});
|
||||
|
||||
test("jQuery.extend(Object, Object)", function() {
|
||||
|
||||
Reference in New Issue
Block a user