Javascriptで連想配列 [プログラミング]
前回、こんな話をしました。
Javascriptで文字列を添え字にする配列(通称「連想配列」)を作るには、プロパティを一切持たないクラスで代用する。
でも、メソッドとかが無いから使い勝手が悪いのでラッパクラスを作ろう。
で、作って見ました。
var Map = function() { this.data_ = function(){} } Map.prototype = { data_ : null, use_prototype_ : false, prototype_value_ : undefined, // 要素を空にする clear : function() { this.data_ = function(){} this.use_prototype_ = false; }, // 指定のキーのデータを持っているならtrue contains : function(key) { return key == "prototype" ? this.use_prototype_ : key in this.data_; }, // 値を保持する put : function(key, value) { if (key == "prototype") { this.use_prototype_ = true; this.prototype_value_ = value; } else { this.data_[key] = value; } }, // 指定のキーに割り当てられている値を取得する get : function(key) { return key == "prototype" ? this.prototype_value_ : this.data_[key]; }, // データの個数を返す。 get size() { var n = this.use_prototype_ ? 1 : 0; for (var key in this.data_) { if (key != "prototype") n = n + 1; } return n; }, // キーの一覧を返す get keys() { for (var key in this.data_) { if (key != "prototype" || this.use_prototype_) yield key; } } }
プロパティを持たないクラスを作っても、プロパティ「prototype
」だけは必ず持っているようなので、キーに"prototype"
が指定された時を特別扱いする必要がありました。
そのため、keys
でyield
命令を使っているので、
動作環境はJavascript 1.7 以降(Firefox 2以降?)です。
IE 7では動きません。
keys
を削除すればIE 7でも動作するはずです。
使い方は、こんな感じ。
<script type="text/javascript; version=1.7"> function test() { var map = new Map(); map.put("orange", "みかん"); map.put("banana", "バナナ"); map.put("orange", "オレンジ"); alert(map.get("orange")); // 「オレンジ」と表示 alert(map.size); // 「2」と表示 for (var key in map.keys) { alert(key); // 「orange」と「banana」を表示 } alert(map.contains("banana")); // 「true」と表示 alert(map.contains("apple")); // 「false」と表示 } </script>
今日の二冊 | |
|
タグ:JavaScript
2009-04-26 08:35
nice!(0)
コメント(0)
トラックバック(0)
コメント 0