Массив ассоциативных ключей массива в 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. Вы можете найти дополнительную информацию и частичную работу для этого на этом ответе здесь.
Ответ 5
Теперь вы можете использовать
Object.keys(obj)
чтобы получить массив, состоящий из доступных ключей в объекте. Mozilla имеет информацию об использовании и доступности.
Ответ 6
Вы можете использовать $.each()
в jQuery:
function keyArray(obj) {
var rv = [];
$.each(options, function(key) { rv.push(key); });
return rv;
}
затем
var keys = keyArray(options);
дает вам ["key1", "key2"]
как массив, который вы могли бы join
, чтобы получить строку.