クラス配列を配列に変換するmakeArray()

1516 ワード

面接でこの問題に遭遇し、jqueryでargementsやgetElementsByTagNameという
クラス配列を真の配列に変換しますか?
APIを調べたjQuery.makeArray(obj)変換後、特殊な機能を持つオブジェクトは存在せず、通常の配列オブジェクトになります.

var domNodes = Array.prototype.slice.call(document.getElementsByTagName("*"));
//  domNodes     Array       
makeArray: function( a ) {
		var r = [];

		// Need to use typeof to fight Safari childNodes crashes
		if ( typeof a != "array" )
			for ( var i = 0, al = a.length; i < al; i++ )
				r.push( a[i] );
		else
			r = a.slice( 0 );

		return r;
	}

makeArray: function( arr, results ) {
		var ret = results || [];
		if ( arr != null ) {
			if ( isArraylike( Object(arr) ) ) {
				jQuery.merge( ret,
					typeof arr === "string" ?
					[ arr ] : arr
				);
			} else {
				core_push.call( ret, arr );
			}
		}

		return ret;
	}

  <div>First</div>
  <div>Second</div>
  <div>Third</div> 
  <div>Fourth</div>
<script>
    var elems = document.getElementsByTagName("div"); // returns a nodeList
    var arr = jQuery.makeArray(elems);
    arr.reverse(); //  arr       ,             
    $(arr).appendTo(document.body);
</script>