Создание хэш-таблицы и идеальной хэш-функции в JavaScript
Я работаю с Google Maps API и чувствую, что есть лучший способ поиска по панорамным изображениям, кроме огромного switch
заявление. Я думаю, что использование внешней хеш-таблицы будет гораздо более эффективным и намного проще в обслуживании. Каждое изображение имеет уникальный panoID
, который я бы смог определить. Читая о хеш-таблицах, я верю, что могу сказать, что мог бы создать таблицу и идеальную функцию для получения нужных мне данных в постоянное время. Есть хороший ресурс о том, как это построить? У меня нет опыта хеширования.
Моя логика выглядит так: каждое изображение сохраняется в каталоге как sometext_panoID.jpg
, где sometext
это строка и panoID
это все, что я хочу. При инициализации данных в вышеупомянутом операторе переключения все переключения выполняются в соответствии с panoID, и другие метаданные доступны там. Например:
switch(panoID) {
case "test1":
links.push({
description : "TEST2",
pano : "test2",
heading : 70
});
break;
case "test2":
links.push({
description : "TEST1",
pano : "test1",
heading : 125
});
links.push({
description : "TEST3",
pano : "test3",
heading : 0
});
break;
case "test3":
links.push({
description : "TEST2",
pano : "test2",
heading : 0
});
break;
}
Так как я буду знать все panoID
Если у меня нет необходимости сортировать, добавлять или иным образом что-либо менять после создания таблицы, я чувствую, что есть способ создать идеальный хэш, но не знаю, с чего начать. Какие-нибудь советы? Спасибо заранее
1 ответ
На самом деле простые простые объекты со своими свойствами реализованы в виде хеш-таблиц. Таким образом, нет необходимости читать об алгоритмах хеширования, вы можете выполнить эту работу с помощью вашего движка JS:
var table = {
"test1": [
{
description : "TEST2",
pano : "test2",
heading : 70
}
],
"test2": [
{
description : "TEST1",
pano : "test1",
heading : 125
},
{
description : "TEST3",
pano : "test3",
heading : 0
}
],
"test3": [
{
description : "TEST2",
pano : "test2",
heading : 0
}
]
};
var itemstobepushed = table[panoID];
[].push.apply(links, itemstobepushed);