Создание хэш-таблицы и идеальной хэш-функции в 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);
Другие вопросы по тегам