Массив ассоциативных ключей массива в javascript

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

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

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

{"key1","key2"}

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

"key1, key2"

Спасибо
v.

Ответы

Ответ 1

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

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

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

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

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

Ответ 2

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

Ответ 3

Способ jQuery:

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

Ответ 4

Большинство основных браузеров теперь имеют встроенную функциональность, метод 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, если вы передаете что-либо, кроме объекта в (или "ассоциативный массив", если хотите).
  • Он будет работать вокруг раздражающей проблемы, связанной с DOM, в Internet Explorer, где коллекции не имеют метода hasOwnProperty.

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

Ответ 6

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

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

затем

var keys = keyArray(options);

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