我需要使用JavaScript存储一些统计数据,就像我在c#中做的那样:
Dictionary<string, int> statistics;
statistics["Foo"] = 10;
statistics["Goo"] = statistics["Goo"] + 1;
statistics.Add("Zoo", 1);
JavaScript中是否存在哈希表或Dictionary<TKey, TValue>之类的东西? 我如何以这种方式存储值呢?
我需要使用JavaScript存储一些统计数据,就像我在c#中做的那样:
Dictionary<string, int> statistics;
statistics["Foo"] = 10;
statistics["Goo"] = statistics["Goo"] + 1;
statistics.Add("Zoo", 1);
JavaScript中是否存在哈希表或Dictionary<TKey, TValue>之类的东西? 我如何以这种方式存储值呢?
当前回答
所有现代浏览器都支持JavaScript Map对象。有几个原因使得使用Map比使用Object更好:
Object有一个原型,所以映射中有默认键。 对象的键是字符串,它们可以是Map的任何值。 当你必须跟踪对象的大小时,你可以很容易地获得Map的大小。
例子:
var myMap = new Map();
var keyObj = {},
keyFunc = function () {},
keyString = "a string";
myMap.set(keyString, "value associated with 'a string'");
myMap.set(keyObj, "value associated with keyObj");
myMap.set(keyFunc, "value associated with keyFunc");
myMap.size; // 3
myMap.get(keyString); // "value associated with 'a string'"
myMap.get(keyObj); // "value associated with keyObj"
myMap.get(keyFunc); // "value associated with keyFunc"
如果希望垃圾收集没有从其他对象引用的键,可以考虑使用WeakMap而不是Map。
其他回答
由于JavaScript中的每个对象都像哈希表一样,并且通常是作为哈希表实现的,所以我就这样…
var hashSweetHashTable = {};
在c#中,代码如下:
Dictionary<string,int> dictionary = new Dictionary<string,int>();
dictionary.add("sample1", 1);
dictionary.add("sample2", 2);
or
var dictionary = new Dictionary<string, int> {
{"sample1", 1},
{"sample2", 2}
};
在JavaScript中:
var dictionary = {
"sample1": 1,
"sample2": 2
}
c#字典对象包含有用的方法,如dictionary. containskey ()
在JavaScript中,我们可以像这样使用hasOwnProperty:
if (dictionary.hasOwnProperty("sample1"))
console.log("sample1 key found and its value is"+ dictionary["sample1"]);
除非你有特别的理由不这样做,否则就用一个普通的对象。JavaScript中的对象属性可以使用哈希表样式的语法引用:
var hashtable = {};
hashtable.foo = "bar";
hashtable['bar'] = "foo";
foo和bar元素现在都可以被引用为:
hashtable['foo'];
hashtable['bar'];
// Or
hashtable.foo;
hashtable.bar;
当然,这意味着你的键必须是字符串。如果它们不是字符串,它们会在内部转换为字符串,所以它仍然可以工作。你的里程可能会有所不同。
使用JavaScript对象作为关联数组。
关联数组:简单地说,关联数组使用字符串而不是整数作为索引。
使用
var dictionary = {};
JavaScript允许您使用以下语法向对象添加属性:
Object.yourProperty = value;
相同的另一种语法是:
Object["yourProperty"] = value;
如果可以,也可以使用以下语法创建键到值的对象映射:
var point = { x:3, y:2 };
point["x"] // returns 3
point.y // returns 2
可以使用for..in循环构造遍历关联数组,如下所示
for(var key in Object.keys(dict)){
var value = dict[key];
/* use key/value for intended purpose */
}
var associativeArray = {};
associativeArray["one"] = "First";
associativeArray["two"] = "Second";
associativeArray["three"] = "Third";
如果你来自面向对象的语言,你应该看看这篇文章。