以下のコードを検討してください。
function splicer()
{
var arrayElements = ["elem1","elem2","elem3","elem4"];
for(var index in arrayElements)
{
arrayElements.splice(index,1);
}
alert("Elements: "+arrayElements);
}
上記の関数は、配列からすべての要素を削除することになってい"arrayElements"
ます。しかし、そうはなりません。
Javascript エンジンは をそのまま維持し、"index"
変更された配列を気にしません。"for each"
人々は、この種の問題がないループのようなものを期待するかもしれません
次のコードでさえ動作しないようです:
function splicer()
{
...
for(var index in arrayElements)
{
arrayElements.splice(index--,1);
}
...
}
変数「インデックス」の値を変更しても機能しないようです。変更された値は「for(...){...}」ブロック内で使用できますが、ループが次の反復に到達すると、値はリセットされ、次のインデックスから時計仕掛けとして続行されます。
したがって、次のようなコードが唯一の解決策であると思われます。
function splicer()
{
var arrayElements = ["elem1","elem2","elem3","elem4"];
for(var index=0;index<arrayElements.length;index++)
{
arrayElements.splice(index--,1);
}
alert("Elements: "+arrayElements);
}
テスト済み: Firefox 16 ベータ版。
しかし、単項演算子を"splice()"
メソッド内に配置すると、一見すると誤解を招くように見えます。
"W3C"
これは、彼らが良い解決策を思いつくように、関係者に検討する価値があるかもしれません.