javascript - 如何在 javascript 中创建 json 对象的哈希表?

标签 javascript json hashtable

我想创建一个 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/

相关文章:

algorithm - 支持类队列操作和模式查找的数据结构

javascript - 如何让 JAWS 屏幕阅读器阅读标题文档以逐个字母而不是句子单独阅读?

json - Google 日历 API 无法处理curl 客户端请求

javascript - 如何修复语法错误: await is only valid in async function in Google cloud vision

c# - System.Text.Json:将 JSON 转换为十进制值 "NA"

json - 故障排除帮助 jquery/ajax/json 没有 http 响应

c# - 从哈希表中查找值

java - 从 Java 中的哈希表替换字符串中的值

javascript - 有什么方法可以从 Chrome 扩展程序访问证书信息

javascript - ajax客户端到服务器端