Получить все ключи объекта JavaScript

мне было интересно, есть ли быстрый способ извлечь ключи ассоциативного массива в массив или список, разделенный запятыми, с помощью JavaScript (jQuery в порядке).

options = {key1: "value1", key2: "value2"};

результатом должен быть массив:

["key1", "key2"]

или просто строку:

"key1, key2"

6 ответов


вы можете легко получить массив из них через for петли, например:

var keys = [];
for(var key in options) {
  if(options.hasOwnProperty(key)) { //to be safe
    keys.push(key);
  }
}

затем использовать keys как вы хотите, например:

var keyString = keys.join(", ");

вы можете проверить это здесь. The .hasOwnProperty() проверка должна быть безопасной, если кто-то испортил прототип объекта и тому подобное.


options = {key1: "value1", key2: "value2"};
keys = Object.keys(options);

способ jQuery сделать это:

var keys = [];
options = {key1: "value1", key2: "value2"};
$.each(options, function(key, value) { keys.push(key) })
console.log(keys)

большинство основных браузеров имеют эту встроенную функциональность сейчас, метод Object.keys():

var keys = Object.keys(options);
//-> ["key1", "key2"]

вы также можете использовать небольшой фрагмент для реализации этого в браузерах, которые его не поддерживают:

Object.keys = Object.keys || (function () {
    var hasOwnProperty = Object.prototype.hasOwnProperty;

    return function (o) {
        if (typeof o != "object" && typeof o != "function" || o === null)
            throw new TypeError("Object.keys called on a non-object");

        var result = [];
        for (var name in o) {
            if (hasOwnProperty.call(o, name))
                result.push(name);
        }

        return result;
    };
})();

этот фрагмент работает почти так же, как в Примере Ника Крейвера с 2 исключениями:

  • он выдаст содержательный TypeError, если вы передадите что-либо, кроме объекта (или "ассоциативного массива", если вы любить.)
  • он будет работать вокруг раздражающей проблемы, связанной с DOM в Internet Explorer, где коллекции не имеют hasOwnProperty метод.

это (и другие ответы здесь) не работает вокруг ошибки перечисления IE, однако. Вы можете найти дополнительную информацию и частичную работу для этого на ответ здесь.


теперь вы можете использовать

Object.keys(obj)

чтобы получить массив, состоящий из доступных ключей в объект. Mozilla имеет информацию об использовании и доступности.


можно использовать $.each() в jQuery:

function keyArray(obj) {
  var rv = [];
  $.each(options, function(key) { rv.push(key); });
  return rv;
}

затем

var keys = keyArray(options);

дает ["key1", "key2"] как массив, который вы могли бы join получить строку.