我想创建一个 json 对象的哈希表,其中每个 json 对象代表一个用户。
我想这样做是为了创建用户的客户端“缓存”。
User { ID: 234, name: 'john', ..);
所以我可以这样引用:
if(userCache[userid] != null) 警报(userCache[用户ID].ID);
这可能吗?
最佳答案
Javascript 对象本身就是 map ,例如:
var userCache = {};
userCache['john'] = {ID: 234, name: 'john', ... };
userCache['mary'] = {ID: 567, name: 'mary', ... };
userCache['douglas'] = {ID: 42, name: 'douglas', ... };
// Usage:
var id = 'john';
var user = userCache[id];
if (user) alert(user.ID); // alerts "234"
(我不清楚您的“userid”是“john”还是 234,所以我在上面选择了“john”,但如果您愿意,也可以使用 234。)
这取决于实现如何存储键以及映射是散列映射还是其他结构,但我已经用数百个对象完成了此操作并且对性能非常满意,即使在 IE 上也是如此较慢的实现之一(目前)。
之所以可行,是因为有两种方法可以获取 Javascript 对象的属性:通过点分符号和括号符号。例如:
var foo = {bar: 10};
alert(foo.bar); // alerts "10"
alert(foo['bar']); // alerts "10"
alert(foo['b' + 'a' + 'r']); // alerts "10"
s = "bar";
alert(foo[b]); // alerts "10"
这种通过名称获取对象属性的括号语法与通过索引获取数组元素的语法相同,这似乎很奇怪,但实际上,数组索引是 Javascript 中的对象属性。属性名称始终是字符串(理论上),但是当您执行诸如 user[234]
之类的操作时,会发生自动转换。 (如果可以的话,实现可以自由地优化转换,前提是要保持语义。)
编辑一些点点滴滴:
遍历缓存
如果你想遍历缓存(并且基于 your follow-up question ,你会这样做,所以也许阅读这个问题的其他人也会想要):
var key, user;
for (key in userCache) {
// `key` receives the name of each property in the cache, so "john",
// "mary", "douglas"...
user = userCache[key];
alert(user.ID);
}
按键以没有定义的顺序循环,它因浏览器而异。
从缓存中删除
假设您想从缓存中完全删除一个属性:
delete userCache['john'];
现在对象中不再有“john”属性。
关于javascript - 如何在 javascript 中创建 json 对象的哈希表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2820202/