17

我想在 JavaScript 中创建一个对象,它将值存储在键、值对中,我应该能够传递一些键并且应该能够取回它的值。在 .NET 世界中,我们可以使用字典类来实现这种实现。我们在 JavaScript 世界中有什么选择吗?我正在使用 ExtJs 4.1,所以如果您知道 ExtJS 中的任何选项,即使这样也可以。

我已经尝试过这样的事情,但我无法按键获得价值。

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

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

3 回答 3

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");
于 2013-07-22T12:40:07.600 回答
3

这个类取自Marijn Havereke 的书 Eloquent JavaScript怎么样?

小提琴

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);
});
于 2014-08-02T00:40:59.143 回答
1
var widget={};
var key='k';
widget[key]='v';
alert(widget.k);//gives you v
于 2013-07-22T12:50:05.633 回答