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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

против

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

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

Некоторые функции:

var obj = {}; //Initialized empty object

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

delete obj[key];

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

key in obj;

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

obj[key];

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

obj[key] = value;

Ответ 3

Потому что в javascript нет такой вещи, как встроенные ассоциативные массивы. Вот почему это плохо.

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

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

Он просто создает СОБСТВЕННОСТЬ, называемую "а", и устанавливает ее значение "привет, мир!". Вот почему длина всегда равна 0, и почему вывод alert(theArray) пуст.

Надеюсь, это поможет!

Ответ 4

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

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

var myObj = { foo: 42 };

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

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

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

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

Ответ 5

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

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

вполне приемлемо, и в нем появится предупреждение. Но если вы используете точечное имя:

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

не удастся, так как Javascript будет искать атрибут с именем this в объекте x, которого не существует. Существует только атрибут this.is.

Ответ 6

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

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

Ответ 7

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

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

    $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 или его варианты.