2015-07-06 2 views
0

У меня возникла ситуация, в которой я бы очень выиграл от использования кеширования функций (memoization).Самый эффективный способ использования объекта в качестве хеш-ключа

Однако моя функция принимает один аргумент, значение которого является очень большим и многомерным Array.

Стандартный способ сделать кеширование (и единственный способ, о котором я могу думать) - создать свойство cache самой функции (cache - это хэш). При каждом запуске функции вы можете проверить наличие myFunc.cache[arg] и просто вернуть это значение, если оно существует, иначе вы выполните вычисления как обычно и добавьте аргумент как свойство cache.

Однако, похоже, что javascript не пытается оценить строки, используемые в качестве хеш-ключей при их создании, и всегда просто рассматривает их как строки. example

Я могу применить JSON.stringify к аргументу, но поскольку массив будет большим и вложенным, мне интересно, существует ли более эффективный способ определения уникальных аргументов.

+0

Это какая-то среда, которую вы контролируете или просто старые добрые браузеры? В основном вы запрашиваете новые [карты] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map). –

+0

Просто простой старый браузер – LukeP

+0

Какой будет желаемый вывод вашего JSFiddle? –

ответ

0

Этот вопрос в основном то, что я просил, не зная его:

JavaScript Hashmap Equivalent

В моем случае, самое простое решение, это просто вручную сделать 0-й индекс моих массивов идентификатор, который можно использовать в качестве хэш-ключ.

Без средства для этого или чего-то подобного вам необходимо либо создать свой собственный хэш (описанный в связанном вопросе), либо дождаться официального объекта Map, который будет реализован.

 Смежные вопросы

  • Нет связанных вопросов^_^