SSブログ

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"が指定された時を特別扱いする必要がありました。

そのため、keysyield命令を使っているので、
動作環境は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>
[新幹線] 今日の二冊
銃・病原菌・鉄〈上巻〉―1万3000年にわたる人類史の謎

銃・病原菌・鉄〈上巻〉

  • 作者: ジャレド ダイアモンド
  • 出版社/メーカー: 草思社
  • 発売日: 2000/09
  • メディア: 単行本

タグ:JavaScript
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

Javascriptの配列XMLデータの並べ替え ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。