javascriptの多次元スパース配列から要素を削除する最も移植性の高い方法は何ですか?javascriptの多次元配列から要素を削除する最も移植性の高い方法は何ですか?
行は未定義になることがありますか?
if(content[row]) {
delete content[row][col];
}
これはうまくいくのですか?
if(r=content[row]) {
delete r[col];
}
javascriptの多次元スパース配列から要素を削除する最も移植性の高い方法は何ですか?javascriptの多次元配列から要素を削除する最も移植性の高い方法は何ですか?
行は未定義になることがありますか?
if(content[row]) {
delete content[row][col];
}
これはうまくいくのですか?
if(r=content[row]) {
delete r[col];
}
で、配列である
:
は、ここで私が働いている私のGameAPIからの抜粋です。 delete
はこのように、要素だったのアレイに空きスペースを残します:
var arr = [0, 1, 2, 3];
delete arr[1];
arr; // [0, undefined, 2, 3]
は、配列から要素を削除するに穴を離れることなく、あなたが使用する必要がありますsplice()
:
arr.splice(1, 1); // Start deleting at index 1, delete one element
arr; // [0, 2, 3]
両方のあなたの例は正常に動作します。content[row]
が存在しない場合、if
の本文は評価されません。
スプライス法を使ってスピードテストを行いました。手動で要素を削除するよりも処理速度が遅くなりますが、コードははるかに簡単です。編集:プラスそれは注文を維持します。 –
要素を削除するだけでなく、配列の長さも調整する必要があります。
通常、配列の最後の要素のインデックスを置き換えられた要素に設定し、最後の要素を削除して長さを減らします。速いですが、配列の構造は保持されません。私は、インデックスそれが依存
removeAt : function(a, i) {
//Removes an element in array
if(!(a.length>i)) return false;
delete a[i];
a[i] = a[a.length-1];
delete a[a.length-1];
a.length--;
return true;
}
私はこの質問で "ポータブル"という言葉を得られません。それはbaric javascript(domとやり取りしない)です。それはどこでもうまくいくはずです。 –
理想的には...しかし、配列でさえ、誰もが標準に従うわけではありません。 –