Подтвердить что ты не робот

JavaScript - короткий способ объявления ассоциативного массива

Есть ли короткий способ объявления ассоциативного массива, как в PHP?

$myArray = array('a' => 'b'); // PHP Way

В JavaScript я бы сделал это следующим образом:

var myArray = [];
myArray['a'] = 'b';

Я не ищу объекты JavaScript.

4b9b3361

Ответ 1

JavaScript не имеет ассоциативных массивов. В вашем примере вы объявляете myArray как массив, но затем назначаете ему объект. Таким образом, ваш код не отличается от этого:

var myObject = {};
myObject['a'] = 'b';

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

Ответ 2

Объявите объект следующим образом:

var myArray = {"a": "b", "c": "d"};

... а затем обратитесь к каждому элементу, как это:

var somethingElse = myArray["a"]; //Sets "somethingElse" to "b".

Как @Chris и @Marc упоминают в комментариях: в JavaScript объекты ARE ассоциируют массивы, и наоборот, они просто ссылаются на два разных способа сделать то же самое. Например...

var somethingElse = myArray["a"];
var anotherVariable = myArray.a;

... сделайте то же самое.

Ответ 3

Я не ищу объекты JavaScript.

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

var myArray = [];
myArray['a'] = 'b';
alert(typeof myArray); // 'object'

Сначала вы создаете объект, используя синтаксис литерала массива:

var myArray = [];

что означает, что вы создали объект, который наследуется от Array.prototype. По сути, вы имеете дело с объектом, который был дополнен методами, хранящимися в Array.prototype.

Чтобы проверить, что myArray на самом деле является массивом (ну, я бы сказал, массивы JavaScript - это псевдо-массивы), вы можете проверить его конструктор:

alert(typeof myArray === 'object' && myArray.constructor === Array);

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

alert(Object.prototype.toString.apply(myArray) === '[object Array]');

Вы также можете использовать instanceOf:

alert(myArray instanceof Array);

или Array.isArray:

alert(Array.isArray(myArray));

Ответ 4

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

a = {}
a[3] = 15
a.b = "c"
a['def'] = 'something'

Этот код создает единственный действительный объект со свойствами, которые вы ожидаете. Все они. Вы можете комбинировать условно проиндексированный массив и ассоциативный массив в одном объекте.

Что касается объявления целой группы одновременно, обычный синтаксис:

a = {
    'key1' : 'val1',
    'key2' : val2,
    key3 : val3,
    key4 : "val4"
}