0

Существует ли реализация словаря в JavaScript?

10

Как реализовать массив с индексатором в JavaScript? В .Net есть что-то вроде словаря, а как это реализовать в JavaScript?

5 ответ(ов)

0

Технически нет, но вы можете использовать обычный объект JavaScript в качестве словаря:

var a = {"a": "wohoo", 2: "hello2", "d": "hello"};
alert(a["a"]);
alert(a[2]);
alert(a["d"]);

Обратите внимание, что в JavaScript ключи объекта могут быть как строками, так и числами. При доступе к значениям вы можете использовать как квадратные скобки, так и точечный нотацию, но при этом ключ должен быть строкой, если вы используете точечную нотацию.

0

Перевод на русский в стиле ответа на StackOverflow.com:

В вашем вопросе описывается задача, которая ставилась в вашем последнем проекте, касающаяся создания клиентского приложения для браузера, работающего с большими объемами данных. Вам удалось разработать словарь на JavaScript, но с учетом некоторых особенностей языка и ваших собственных предпочтений. Вот что можно выделить из вашего опыта и реализации.

То, что JavaScript не имеет истинного нативного словаря, можно обойти, как вы и сделали, создав собственный класс Dict. Этот класс использует массив и объект для хранения пар "ключ-значение", а также предоставляет методы для работы с этими данными, такие как добавление, удаление, и проверка существования ключей.

Ваше решение содержит несколько хороших практик:

  1. Инкапсуляция: Вы скрываете массив и объект от внешнего доступа, что предотвращает случайные изменения. Это действительно важный момент, который обеспечивает целостность данных вашего словаря.

  2. Управляемые ключи: Добавление символа подчеркивания в начале ключей для избежания конфликтов с недействительными именами свойств - это умное решение. Это позволяет избежать проблем, которые могут возникнуть из-за несовместимости символов в названиях ключей.

  3. Использование методов массивов: Вы адаптировали методы массива под структуру вашего словаря, что делает его более интуитивным для разработчиков, знакомых с JavaScript. Это повышает удобство использования вашего словаря.

  4. Применение замыканий: Замыкания действительно являются мощным инструментом для обеспечения контроля над функциями и данными. Они позволяют вам организовать код так, чтобы внутренние функции имели доступ к переменным вашего словаря, не поддаваясь внешнему вмешательству.

  5. Подход к проектированию: Вы начали проект с пониманием классов, но быстро адаптировались к прототипному подходу JavaScript, который требует иного понимания. Ваше приложение benefitted от использования объектов-фабрик и методов для создания экземпляров словаря, что отражает хороший стиль проектирования.

Отличное решение для задачи, с которой вы столкнулись! Если у вас есть вопросы или вы хотите обсудить конкретные аспекты реализации, не стесняйтесь спрашивать.

0

В JavaScript выражение {"index": anyValue} представляет собой объект (или словарь), где index — это ключ, а anyValue — это значение, которое может быть любого типа. Важно отметить, что такие объекты могут использоваться для хранения пар "ключ-значение". Для более подробной информации о формате JSON вы можете обратиться к определению JSON на официальном сайте: json.org.

0

Наиболее близкой реализацией .NET словаря в JavaScript, которую я использовал, является хэш-объект (см. ссылку: http://www.mojavelinux.com/articles/javascript_hashes.html). Он реализует массив "под капотом" и имеет методы, аналогичные методам .NET словаря.

0

Ваш вопрос касается использования объекта nDictionary, который создается с помощью Object.create(null), для хранения значений по индексам. Давайте разберем вышеуказанный код на русском.

В коде мы создаем объект nDictionary, который не имеет свойств Object.prototype, что позволяет избежать потенциальных конфликтов с встроенными свойствами объекта. Затем мы реализуем две функции: setDictionary для установления значений по индексу и getDictionary для их получения.

Вот как выглядит ваш код:

var nDictionary = Object.create(null);

function setDictionary(index, value) {
    nDictionary[index] = value;
}

function getDictionary(index) {
    return nDictionary[index];
}

setDictionary(81403, "test 1");
setDictionary(81404, "test 2");
setDictionary(81405, "test 3");
setDictionary(81406, "test 4");
setDictionary(81407, "test 5");

alert(getDictionary(81403));
  1. Мы создаем пустой объект nDictionary без свойств родителя.
  2. Функция setDictionary(index, value) принимает индекс и значение, добавляет их в объект.
  3. Функция getDictionary(index) возвращает значение по заданному индексу.
  4. Мы добавляем пять значений в nDictionary с разными индексами.
  5. На последнем шаге вызываем alert, который показывает значение по индексу 81403, то есть "test 1".

Если у вас есть дополнительные вопросы или нужна помощь, не стесняйтесь спрашивать!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь