2013-07-22 4 views
17

JavaScriptでオブジェクトを作成して、キーと値のペアに値を格納したいのですが、いくつかのキーを渡すことができ、その値を戻すことができるはずです。 .NETの世界では、この種の実装に辞書クラスを使用できます。 JavaScriptの世界ではどんな選択肢もありますか?私はExtJs 4.1を使用しています。もしあなたがExtJSの任意のオプションを知っていても、それはうまくいくでしょう。Javascriptで.netのような辞書オブジェクトを作成する

私はこれを試しましたが、キーで値を得ることはできません。

var Widget = function(k, v) { 
    this.key = k; 
    this.value = v; 
}; 

var widgets = [ 
    new Widget(35, 312), 
    new Widget(52, 32) 
]; 

答えて

30

は、標準を使用しjavascriptオブジェクト:

var dictionary = {};//create new object 
dictionary["key1"] = value1;//set key1 
var key1 = dictionary["key1"];//get key1 

注:も取得することができます/あなたは、ドット表記法を使用して作成した "キー" を設定する(すなわちdictionary.key1


特定の機能が必要な場合は、さらにそれを取ることができます...

function Dictionary(){ 
    var dictionary = {}; 

    this.setData = function(key, val) { dictionary[key] = val; } 
    this.getData = function(key) { return dictionary[key]; } 
} 

var dictionary = new Dictionary(); 
dictionary.setData("key1", "value1"); 
var key1 = dictionary.getData("key1"); 
+6

から採取したこのクラス約{}、使用: VAR辞書= Object.create(NULL)。 そうすれば、プロトタイプのないオブジェクトが得られます。 – neiker

1
var widget={}; 
var key='k'; 
widget[key]='v'; 
alert(widget.k);//gives you v 
3

方法代わりMarijn Havereke's book Eloquent JavaScript

The fiddle

function Dictionary(values) { 
    this.values = values || {}; 

    var forEachIn = function (object, action) { 
     for (var property in object) { 
     if (Object.prototype.hasOwnProperty.call(object, property)) 
      action(property, object[property]); 
     } 
    }; 

    Dictionary.prototype.containsKey = function(key) { 
     return Object.prototype.hasOwnProperty.call(this.values, key) && 
     Object.prototype.propertyIsEnumerable.call(this.values, key); 
    }; 

    Dictionary.prototype.forEach = function(action) { 
     forEachIn(this.values, action); 
    }; 

    Dictionary.prototype.lookup = function(key) { 
     return this.values[key]; 
    }; 

    Dictionary.prototype.add = function(key, value) { 
     this.values[key] = value; 
    }; 
}; 

var numberDic = new Dictionary({One: 1,Two: 2, Three: 3}); 

//-- does key exist 
console.log(numberDic.containsKey("One")); 
console.log(numberDic.containsKey("One")); 
console.log(numberDic.containsKey("Four")); 

//-- loop through each item in the dic 
numberDic.forEach(function(key, value) { 
    console.log(key, "is", value); 
}); 

//-- works with complex objects 
//------------------------------------------ 
var complexObjectDic = new Dictionary({ 
    Microsoft: { 
     Something: "Real Interesting", 
     About: "Microsoft", 
     Will: "Go", 
     Here: ".", 
     ProductPrices: { 
      WindowsPhone: 55.88, 
      Windows :{ 
       WinXp : 180.00, 
       Win7 : 200.00, 
       Win8 : 150.00 
      } 
     } 
    }, 
    Apple: { 
     Did: "you", 
     Hear: "the", 
     New: "iphone", 
     Will: "be coming out soon", 
    }}); 

//-- does key exist 
console.log(complexObjectDic.containsKey("Microsoft")); 
console.log(complexObjectDic.containsKey("Apple")); 
console.log(complexObjectDic.containsKey("Facebook")); 

//-- search the dic by key 
console.log(complexObjectDic.lookup("Microsoft")); 
console.log(complexObjectDic.lookup("Apple")); 

//-- add item to dic 
complexObjectDic.add("Instagram", { 
    This: "is", 
    Another: "object", 
    That: "I willl be Adding" 
}); 

//-- loop through each item in the dic 
complexObjectDic.forEach(function(key, value) { 
    console.log(key, value); 
}); 
関連する問題