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みたいな。