Ассоциативный массив против объекта в javascript
В моем script необходимо создать хеш-таблицу, которую я искал в Google для этого. Большинство людей рекомендуют объект JavaScript для этой цели. Проблема в том, что некоторые из ключей в хеш-таблице имеют "." в них. Я могу легко создавать эти ключи с ассоциативными массивами.
Я не понимаю, почему ассоциативные массивы плохие. Первое, что упоминается на сайтах, на которых я смотрел, - это свойство длины. Я исхожу из фона Perl, где я использовал хеши. Чаще всего использовалось получение значения из ключа, проверка наличия ключа, удаление пары ключ-значение, добавление пары ключ-значение. Если это мое общее использование, могу ли я безопасно использовать ассоциативный массив?
Ответы
Ответ 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 или его варианты.