在 Javascript 中创建一个类似 .net 的字典对象

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/17787754/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-27 09:38:10  来源:igfitidea点击:

Creating a .net like dictionary object in Javascript

javascriptjquery.netextjs4lodash

提问by SharpCoder

I want to create a object in JavaScript which will store values in key, value pair and I should be able to pass some key and should be able to get its value back. In .NET world we can use dictionary class for this kind of implementation. Do we have any option in JavaScript world? I am using ExtJs 4.1, so if you know of any option in ExtJS even that would work.

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

I have tried something like this but I cannot get value by key.

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

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

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

回答by musefan

Just use a standard javascript object:

只需使用标准的 javascript 对象:

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

NOTE: You can also get/set any "keys" you create using dot notation (i.e. dictionary.key1)

注意:您还可以获取/设置您使用点表示法创建的任何“键”(即dictionary.key1



You could take that further if you wanted specific functions for it...

如果你想要它的特定功能,你可以更进一步......

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");

回答by ktabarez

How about this class taken from Marijn Havereke's book Eloquent JavaScript

这门课取自Marijn Havereke 的书 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);
});

回答by Hyman_of_All_Trades

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