Получить все ключи объекта JavaScript - PullRequest
18 голосов
/ 09 декабря 2010

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

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

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

["key1", "key2"]

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

"key1, key2"

Ответы [ 6 ]

26 голосов
/ 09 декабря 2010

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

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

Затем используйте keys как хотите, например:

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

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

24 голосов
/ 08 марта 2012
options = {key1: "value1", key2: "value2"};
keys = Object.keys(options);
5 голосов
/ 09 декабря 2010

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

var keys = [];
options = {key1: "value1", key2: "value2"};
$.each(options, function(key, value) { keys.push(key) })
console.log(keys)
2 голосов
/ 15 октября 2014

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

Object.keys(obj)

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

2 голосов
/ 09 декабря 2010

Большинство основных браузеров теперь имеют эту встроенную функциональность, метод - 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;
    };
})();

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

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

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

0 голосов
/ 09 декабря 2010

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

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

тогда

var keys = keyArray(options);

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

...