Получение списка ассоциативных ключей массива
У меня есть ассоциативный массив в Javascript:
var dictionary = {
"cats": [1,2,3,4,5],
"dogs": [6,7,8,9,10]
};
Как мне получить эти словарные ключи? то есть я хочу
var keys = ["cats", "dogs"];
Отредактируйте 7 лет спустя. Чтобы правильно исправить терминологию - в Javascript нет такой вещи, как "ассоциативный массив" - это технически просто object
, и это ключи объектов, которые мы хотим.
Ответы
Ответ 1
Попробуйте следующее:
var keys = [];
for (var key in dictionary) {
if (dictionary.hasOwnProperty(key)) {
keys.push(key);
}
}
hasOwnProperty
необходимо, потому что возможно вставить ключи в объект-прототип dictionary
. Но вы, как правило, не хотите, чтобы эти ключи были включены в ваш список.
Например, если вы это сделаете:
Object.prototype.c = 3;
var dictionary = {a: 1, b: 2};
а затем выполните цикл for...in
над dictionary
, вы получите a
и b
, но вы также получите c
.
Ответ 2
for (var key in dictionary) {
// do something with key
}
Это for..in statement.
Ответ 3
Вы можете использовать: Object.keys(obj)
Пример:
var dictionary = {"cats":[1,2,37,38,40,32,33,35,39,36], "dogs": [4,5,6,3,2]};
// Get the keys
var keys = Object.keys(dictionary);
См. ссылку ниже для поддержки браузера. Он поддерживается в Firefox 4.20, Chrome 5, IE9. Ссылка ниже содержит фрагмент кода, который вы можете добавить, если Object.keys()
не поддерживается в вашем браузере.
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys
Ответ 4
Просто помните, будьте осторожны при использовании for..in, если вы используете библиотеку (jQuery, прототип и т.д.), так как большинство из них добавляют методы к созданным объектам (включая словари).
Это будет означать, что при переходе по ним имена методов будут отображаться в виде ключей. Если вы используете библиотеку, посмотрите документацию и найдите перечислимый раздел, где вы найдете правильные методы для итерации ваших объектов.
Ответ 5
Простой способ JQUERY.
Это то, что я использую
DictionaryObj - объект словаря javascript, который вы хотите пройти.
значение, ключ, который является их именами в словаре.
$.each(DictionaryObj, function (key, value) {
$("#storeDuplicationList")
.append($("<li></li>")
.attr("value", key)
.text(value));
});
Ответ 6
В настоящее время я использую Rob de la Cruz
Object.keys(obj)
и в раннем загруженном файле у меня есть несколько строк кода , заимствованных из других мест в Интернете, которые охватывают случай старых версий интерпретаторов script, у которых нет Object.keys, встроенных в.
if (!Object.keys) {
Object.keys = function(object) {
var keys = [];
for (var o in object) {
if (object.hasOwnProperty(o)) {
keys.push(o);
}
}
return keys;
};
}
Я думаю, что это лучший из двух миров для крупных проектов: простой современный код и обратная совместимая поддержка старых версий браузеров и т.д.
Фактически это ставит решение JW в функцию, когда Rob de la Cruz's
Object.keys(obj) недоступен изначально.