Получение списка ассоциативных ключей массива

У меня есть ассоциативный массив в 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) недоступен изначально.