2011-12-24 5 views
2

javascriptの多次元スパース配列から要素を削除する最も移植性の高い方法は何ですか?javascriptの多次元配列から要素を削除する最も移植性の高い方法は何ですか?

行は未定義になることがありますか?

if(content[row]) { 
    delete content[row][col]; 
} 

これはうまくいくのですか?

if(r=content[row]) { 
    delete r[col]; 
} 
+2

私はこの質問で "ポータブル"という言葉を得られません。それはbaric javascript(domとやり取りしない)です。それはどこでもうまくいくはずです。 –

+0

理想的には...しかし、配列でさえ、誰もが標準に従うわけではありません。 –

答えて

7

で、配列である

は、ここで私が働いている私の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の本文は評価されません。

+0

スプライス法を使ってスピードテストを行いました。手動で要素を削除するよりも処理速度が遅くなりますが、コードははるかに簡単です。編集:プラスそれは注文を維持します。 –

1

要素を削除するだけでなく、配列の長さも調整する必要があります。

通常、配列の最後の要素のインデックスを置き換えられた要素に設定し、最後の要素を削除して長さを減らします。速いですが、配列の構造は保持されません。私は、インデックスそれが依存

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; 
} 
+0

いいえ、長さを調整する必要はありません。だから、私は長さに割り当てることができますか? – Dims

+0

また、寸法を確認する必要がありますか?要素が既に削除されている場合、作業を削除しませんか? – Dims

+0

私は、ブラウザーが配列の操作を扱うさまざまな方法を記述した記事を探していますが、矛盾しており、長さを予防措置として変更しています。私は最適化の長さをチェックします。 –

関連する問題