2007-03-05 (Mon) [長年日記]

JavaScriptで配列の要素を削除

最近、放置していた4873110270を読んでいて軽い衝撃を受けたので覚え書き。

JavaScriptでは配列の要素を削除する簡単なメソッドが用意されていない。もちろんshift、popといった先頭や末尾から取り出すメソッドは用意されているが、途中の要素を1個削除したいという単純な仕事をするメソッドが無い*1。spliceが近いかもしれないけどちょっと面倒なので無視。prototype.jsの拡張にも無いみたい。

これはJavaScriptの配列が、実際にはHashで実現されていることに起因すると想像するが、用意してくれても良いのにと思う。一応deleteメソッドで削除できることは確認したものの、配列のサイズには影響なく期待した結果にならないし、試してないけどたぶんIEでは動かない。

 $ js.bat
 Rhino 1.6 release 1 2004 11 30
 js> a = new Array(1,2,3,4,5)
 1,2,3,4,5
 js>a.length
 5
 js> delete a[3]
 true
 js> a
 1,2,3,,5
 js> typeof a[3]
 undefined
 js>a.length
 5

こんな感じで削除した要素がundefinedになるだけで、後続の要素が詰まることは無い。

普通に配列作り直すのがいいかも。

参考

追記

*1 RubyのArray#delete_atみたいな。