Как я могу динамически создавать ключи в ассоциативных массивах JavaScript?
Вся документация, которую я нашел до сих пор, обновляет уже созданные ключи:
arr['key'] = val;
У меня есть такая строка " name = oscar "
И я хочу закончить с чем-то вроде этого:
{ name: 'whatever' }
То есть я разделяю строку и получаю первый элемент и хочу поместить его в словарь.
Код
var text = ' name = oscar '
var dict = new Array();
var keyValuePair = text.split(' = ');
dict[ keyValuePair[0] ] = 'whatever';
alert( dict ); // prints nothing.
javascript
associative-array
OscarRyz
источник
источник
Ответы:
Используйте первый пример. Если ключ не существует, он будет добавлен.
Появится сообщение, содержащее «Оскар».
Пытаться:
источник
Каким-то образом все примеры, хотя и работают хорошо, слишком сложны:
new Array()
, что является избыточным (и дополнительным) для простого ассоциативного массива (словарь AKA).new Object()
. Работает нормально, но зачем все это лишнее печатать?Этот вопрос помечен как «новичок», поэтому давайте сделаем его проще.
Упрощенный способ использования словаря в JavaScript или «Почему в JavaScript нет специального объекта словаря?»:
Теперь давайте изменим значения:
Удалить значения тоже легко:
источник
Javascript не имеет ассоциативных массивов , у него есть объекты .
Все следующие строки кода делают одно и то же - установите для поля 'name' объекта значение 'orion'.
Похоже, у вас есть ассоциативный массив, потому что an
Array
также являетсяObject
- однако вы вообще не добавляете вещи в массив, вы устанавливаете поля для объекта.Теперь, когда это прояснено, вот рабочее решение для вашего примера
источник
В ответ на MK_Dev можно выполнять итерацию, но не последовательно. (Для этого явно нужен массив)
Быстрый поиск Google вызывает хеш-таблицы в JavaScript
Пример кода для зацикливания значений в хэше (из вышеупомянутой ссылки):
источник
Исходный код (я добавил номера строк, чтобы можно было ссылаться на них):
Почти готово...
trim
так, чтобы текст был такимname = oscar
.trim
в строке 1, использовать=
и обрезать каждый keyValuePairдобавить строку после 3 и до 4:
строка 4: теперь становится:
строка 5: Изменить на:
Я пытаюсь сказать, что
dict[keyValuePair[0]]
это не работает, вам нужно установить строкуkeyValuePair[0]
и использовать ее в качестве ассоциативного ключа. Это единственный способ заставить меня работать. После того, как вы настроите его, вы можете обратиться к нему с помощью числового индекса или ввести кавычки.Надеюсь, это поможет.
источник
Все современные браузеры поддерживают Карту , которая является стриктурой данных ключ / значение. Есть несколько причин, по которым использование карты лучше, чем Object:
Пример:
Если вы хотите, чтобы ключи, на которые нет ссылок из других объектов, собирались мусором, рассмотрите возможность использования WeakMap вместо Map.
источник
Я думаю, что лучше, если вы просто создали так
для получения дополнительной информации, посмотрите на это
Структуры данных JavaScript - Ассоциативный массив
источник
это нормально, но перебирает все свойства объекта массива. если вы хотите перебирать только свойства myArray.one, myArray.two ... попробуйте вот так
теперь вы можете получить доступ как к myArray ["one"], так и выполнять итерации только через эти свойства.
источник
Array
иObject
работать только сObject
деревьями! Замечательное понимание! Это очень полезно сделатьObject.getOwnPropertyNames(obj/array)
!}
источник