コードが任意の環境で機能する必要がある場合は、組み込みオブジェクトにプロパティを追加することはお勧めできません。このようなオブジェクトを拡張する場合は、同じまたは同様のことを行う他の誰かが使用する可能性のあるプロパティ名を使用しないでください。
メンバーを「移動」する方法は複数あるようです。あなたがしているように見えることは、「スワップ」という名前の方が適切です。
if (!Array.prototype.swap) {
Array.prototype.swap = function(a, b) {
var t = this[a];
this[a] = this[b];
this[b] = t;
}
}
新しい配列を作成し、古い配列を何度も変更する必要があるメソッドを呼び出すよりも、値の単純な再割り当ての方が効率的であると思います。しかし、それはとにかく議論の余地があるかもしれません。上記は確かに読みやすく、入力する文字が少なくなっています。
上記は安定しておりarray.swap(4,8)
、と同じ結果が得られることにも注意してくださいarray.swap(8,4)
。
堅牢な関数を作成する場合は、最初に、インデックスがarray.lengthより大きい場合、またはインデックスが存在しない場合などに何をするかを検討する必要があります。例えば
var a = [,,2]; // a has length 3
a.swap(0,2);
上記では、0または1にはメンバーがなく、2にのみメンバーがいます。したがって、結果は次のようになります。
a = [2]; // a has length 1
またはそれが必要です(これは上記の結果になります):
a = [2,,undefined]; // a has length 3
また
a = [2,,,]; // a has length 3 (IE may think it's 4, but that's wrong)
編集
OPでは、次の結果に注意してください。
var b = [,,2];
b.move(0,2);
は
alert(b); // [,2,];
これは期待されたものではないかもしれません、そして
b.move(2,0);
alert(b); // [2,,];
ですから、それも安定していません。