Я объявил массивы Javascript таким образом, чтобы затем мог получить к ним доступ с помощью ключа, но это было давно, и я забыл, как я это делал.
По сути, у меня есть два поля, которые я хочу сохранить: уникальный ключ и его значение. Я знаю, что это можно сделать ... что-то вроде:
var jsArray = new {key: 'test test', value: 'value value'},
new {key: 'test 2', value: 'value 2'};
и доступен как:
value = jsArray[key]
Может кто-нибудь мне напомнить?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Сделать это можно разными способами:
var a = {'a':0, 'b':1, 'c':2};
var b = new Array();
b['a'] = 0;
b['b'] = 1;
b['c'] = 2;
var c = new Object();
c.a = 0;
c.b = 1;
c.c = 2;
Стоит отметить, что a ['b'] и a.b идентичны, на самом деле a [0] совпадает с a.0, только грамматика JS мешает вам сделать это: D
Да, внутренний доступ осуществляется таким же образом, это ваш выбор, использование ведьмовского аромата: D
var myFancyDictionary = {
key: 'value',
anotherKey: 'anotherValue',
youGet: 'the idea'
}
Если вы уже используете Prototype, попробуйте использовать его Hash. Если вы используете jQuery, попробуйте использовать Map.
Вот класс JavaScript, который предоставляет простой словарь.
if ( typeof( rp ) == "undefined" ) rp = {};
rp.clientState = new function()
{
this.items = new Object();
this.length = 0;
this.set = function( key, value )
{
if ( ! this.keyExists( key ) )
{
this.length++;
}
this.items[ key ] = value;
}
this.get = function( key )
{
if ( this.keyExists( key ) )
{
return this.items[ key ];
}
}
this.keyExists = function( key )
{
return typeof( this.items[ key ] ) != "undefined";
}
this.remove = function( key )
{
if ( this.keyExists( key ) )
{
delete this.items[ key ];
this.length--;
return true;
}
return false;
}
this.removeAll = function()
{
this.items = null;
this.items = new Object();
this.length = 0;
}
}
Пример использования:
// Add a value pair.
rp.clientState.set( key, value );
// Fetch a value.
var x = rp.clientState.Get( key );
// Check to see if a key exists.
if ( rp.clientState.keyExists( key )
{
// Do something.
}
// Remove a key.
rp.clientState.remove( key );
// Remove all keys.
rp.clientState.removeAll();
Это кажется немного деспотичным. Есть ли конкретная причина, по которой вам нужны эти функции для всего этого?
ааайдан - что бы вы пропустили?
@rp я бы удалил все, у вас там не определена операция, которая не определена для встроенных объектов, кроме длины
Все объекты (массивы или другие) в JS могут быть проиндексированы - технически любая операция индексирования, a [b] совпадает с a. <Строковое значение b> - хотя, очевидно, для массивов и т. д. Никакой движок JS на самом деле не делает этого, что путь: D