ассоциативный массив против объекта в javascript


в моем скрипте есть необходимость создать хэш-таблицу, я искал в Google для этого. Большинство людей рекомендуют объект JavaScript для этой цели. Проблема в том, что некоторые ключи в хэш-таблице "." в них. Я могу легко создавать эти ключи с ассоциативными массивами.

Я не понимаю, почему ассоциативные массивы-это плохо. Первое, что упоминается на сайтах, которые я смотрел, - это свойство length. Я исхожу из фона Perl, где я использовать хэши. Чаще всего используется для получения значения из ключа, проверки наличия ключа, удаления пары ключ-значение, добавления пары ключ-значение. Если это мое общее использование, могу ли я безопасно использовать ассоциативный массив?

7 58

7 ответов:

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

var foo = {}
foo['bar'] = 'test';
foo['baz.bin'] = 'value';

alert(foo.bar); // shows 'test'
alert(foo['baz.bin']); // shows 'value'

Если вы уже используете их, и они работают, вы в безопасности.

в javascript объект и массив-это почти одно и то же, причем массив имеет немного магической функциональности (свойство autoupdating length и т. д.) и методы прототипа, подходящие для массивов. Также гораздо проще построить объект, чем использовать ассоциативный массив:

var obj = {"my.key": "myValue"};

vs

var obj = [];
obj["my.key"] = "myValue";

поэтому никогда не используйте объект массива для этого, а только обычный объект.

функциональность:

var obj = {}; //Initialized empty object

удалить ключ-значение пара:

delete obj[key];

проверьте, существует ли ключ:

key in obj;

получить значение ключа:

obj[key];

добавить пару ключ-значение:

obj[key] = value;

потому что нет такого понятия как встроенный ассоциативные массивы в JavaScript. Вот почему это плохо.

в самом деле, когда вы используете что-то вроде :

theArray["a"] = "hello, world!";

Он просто создает свойство под названием " a "и установить его значение" Привет, мир!". Вот почему длина всегда равна 0, и почему выход alert(theArray) пусто.

надеюсь, что это помогает!

на самом деле, "ассоциативный массив" - это почти так же, как "массив-как объект" в ECMAScript. Даже Arrays являются объектами в ECMAscript, только за исключением цифровых клавиш (которые все еще являются строками в фоновом режиме), a .length свойство вместе с некоторыми унаследованными методами от Array.prototype.

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

var myObj = { foo: 42 };

myObj.foo; // 42
myObj['foo']; // 42

зная, что вы также можете использовать ключи с .

var myObj = { };
myObj['hello.foo.world'] = 42;

конечно, вы можете получить доступ к этому разделу только с скобочная нотация.

можно использовать . в именах ключей на объектах JS (ака ассоциативные массивы), если вы хотите, они принимаются без проблем. Незначительным недостатком является то, что вы не можете использовать ярлыки с пунктирными клавишами, например

var x = {};
x['hello'] = 'there';
alert(x.hello);

вполне приемлемо и появится предупреждение с " Там " в нем. Но если вы используете пунктирное имя:

var x = {};
x['this.is'] = 'sparta';
alert(x.this.is);

не получится, так как Javascript будет искать атрибут с именем this в объекте x, который не существует. Есть только this.is атрибут.

нет ассоциативного массива, это просто объект.

foo.bar;    // Equivalent to...
foo["bar"]; // Looks like associative array.

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

  • для PHP, [ ] принимает 0, 1 или более элементов (массив), и это называется ассоциативный массив. Это Json в PHP пальто:

    $data = ["message"=>[ "id"=>405, "description"=>"Method not allowed.", "detail"=>[]], "object" => []];

  • Для Javacript, { } принимает 0, 1 или более элементов (массив), и это называется объект. Этот формат данных-Json:

    data = {"message": { "id":405, "description":"Method not allowed.", "detail" : {}}, "object" : {}};

Я просто называю их данные. Самый простой способ описания данных -Json, или его варианты.