2つの配列を1つに連結したいと思います。私は2つの関数がその仕事をすることができることを発見しました。1jQuery.merge()
つはで、もう1つはJavaScriptの組み込み関数concat()
です。彼らは同じことをしているようです、そして私はこれを見つけました。「Mergeは元の配列をループして新しいアイテムを追加するため、フットプリントが小さくなります。Concatは組み込みのJavascript関数であり、高速であるはずですが、フットプリントが大きくなります。」この声明が正しいかどうかはわかりませんが、他に違いはありますか?
2 に答える
その引用は正しく、2つの関数は実際には同じことをしません。1つは2つの配列を1つにマージし(最初のパラメーター)、2つ目は両方から新しい配列を作成します。
それが参照している「フットプリント」は、いつでも使用されるメモリの最大量です。マージは2番目の配列のみを複製するため、メモリ内に必要な配列は2つだけであるため、使用するメモリは少なくて済みます。
組み込み関数には3つの配列が必要であり、新しい配列は連結される両方の配列のサイズである必要があります。
配列AとBに1000個の要素があり、マージされた配列をCと仮定します。
- マージには、1000 + 1000 [a-> c]、および1000[b]または3000スポットが必要です。
- Concatには、1000 +1000[c]と1000[a]と1000[b]または4000スポットが必要です。
使用中のメモリが多い場合は、メモリが少ないほど速くなる可能性があり、移動が少ないほど速くなる可能性があります。
tmasterの状況では、彼はjQuery.merge()を使用して2つの配列をマージしました。実際には、JQuery.mergeを使用してjQuery Object(jQuery Objectにも長さpropもあります)をArrayとマージできます。jQuery.merge()のコードは次のとおりです。
merge: function( first, second ) {
var len = +second.length,
j = 0,
i = first.length;
for ( ; j < len; j++ ) {
first[ i++ ] = second[ j ];
}
first.length = i;
return first;
},
したがって、JQueryオブジェクトにlengthプロパティがある場合、mergeを使用して0,1のような2番目のJQueryオブジェクト属性を最初のJQueryオブジェクトにコピーできます。例を次に示します。
pushStack: function( elems ) {
// Build a new jQuery matched element set
var ret = jQuery.merge( this.constructor(), elems );
...
return ret;
},
this.constructor()はjQuery Object、elemsも返します。しかし、concatはできません。これは、Arrayでのみ使用できます。これは、concatとJQuery.mergeの違いでもあります。