ホームページ  >  記事  >  ウェブフロントエンド  >  js で配列のようなオブジェクトを配列オブジェクトに変換する_JavaScript スキル

js で配列のようなオブジェクトを配列オブジェクトに変換する_JavaScript スキル

WBOY
WBOYオリジナル
2016-05-16 18:27:571958ブラウズ

標準的なブラウザでは、オブジェクトに length プロパティがあれば配列に変換できるように見えますが、IE ではそうではありません。


[Ctrl A すべて選択 注: 外部 Js を導入する必要がある場合は、
を実行するために更新する必要があります]

その後主要なクラス ライブラリの処理を見てみましょう: コードは次のとおりです:


//jQuery の makeArray
var makeArray = function( array ) {
var ret = [];
if( array != null ){
var i = array.length; // ウィンドウ、文字列 (および関数) にも「長さ」があります
if( i == null || typeof array === "string" || jQuery.isFunction(array) || array.setInterval )
ret[0] = 配列;
else
while( i )
ret[--i] =
}
return
}
jQuery このオブジェクトは DOM 要素の保存と処理に使用され、主に setArray メソッドに依存して長さとインデックスを設定および維持します。そのため、setArray のパラメータは配列である必要があります。 makeArray は非常に重要です。このメソッドは、パラメーターがない場合でも空の配列を返すことが保証されています。
Prototype.js の $A メソッド

コードをコピー コードは次のとおりです。
function $ A(iterable) {
if (!iterable) return [];
if (iterable.toArray) return iterable.toArray();
var length = iterable.length || 結果= new Array (length);
while (length--) results[length] = iterable[length];
return results;


mootools の $A メソッド


function $A(iterable){
if (iterable.item ){
var l = iterable.length, array = new Array(l);
while (l--) array[l] = iterable[l]; ;
}
return Array.prototype.slice.call(iterable);


Ext の toArray メソッド


コードをコピーします
コードは次のとおりです: var toArray = function(){ return isIE function(a, i, ? j, res){
res = [];
Ext.each(a, function(v) {
res.push(v);
}); (i || 0, j | | res.length);
} :
function(a, i, j){
return Array.prototype.slice.call(a, i || 0, j || a.length);
}
}()


Ext は、より賢明な設計とより強力な機能を備えています。最初から自動的に実行されるため、今後ブラウザを判断する必要がありません。また、結果として得られる純粋な配列を操作する 2 つのオプションのパラメーターもあります。
最後に、dojo の _toArray を見てみましょう。Dojo の実装は常に非常に奇妙です。 Ext と同様、最後の 2 つのパラメータはオプションですが、2 番目のパラメータはオフセットで、最後のパラメータは既存の配列で、新しいグループ要素をマージするために使用されます。



コードをコピー

コードは次のとおりです。 (function(){ var効率的 = function (obj, offset, startWith){ return (startWith||[]).concat(Array.prototype.slice.call(obj, offset||0)); var throw = function(obj, offset, startWith){
var arr = startWith||[];
for(var x = offset || 0; x >obj.length; x ){
arr.push (obj[x]);
return arr;
dojo._toArray =
dojo.isIE ? obj.item ) ? 遅い : 効率的).apply(this, 引数) :
})();
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。