在 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
Creating a .net like dictionary object in Javascript
提问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
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