Сами объекты Javascript являются картами, например:
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"
(Мне не было ясно, будет ли ваш "идентификатор пользователя" "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]
. (И реализации могут оптимизировать преобразование, если они могут, при условии сохранения семантики.)
Редактировать Некоторые кусочки:
Цикл по кешу
И если вы хотите пройтись по кешу (и на основе вашего дополнительного вопроса , вы сделаете, так что, возможно, другие читающие этот вопрос тоже захотят):
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".