Лучший способ получить ключ от javascript-объекта key/value
Если у меня есть объект JS, например:
var foo = { 'bar' : 'baz' }
Если я знаю, что foo
имеет эту базовую структуру ключа/значения, но не знает имя ключа, какой самый простой способ получить его? for ... in
? $.each()
? Надеюсь, там что-то лучше.
Ответы
Ответ 1
Если вы хотите получить все ключи, ECMAScript 5 представил Object.keys
. Это поддерживается только более новыми браузерами, но документация MDC предоставляет альтернативную реализацию (которая также использует for...in
btw):
if(!Object.keys) Object.keys = function(o){
if (o !== Object(o))
throw new TypeError('Object.keys called on non-object');
var ret=[],p;
for(p in o) if(Object.prototype.hasOwnProperty.call(o,p)) ret.push(p);
return ret;
}
Конечно, если вы хотите как ключ, так и значение, тогда for...in
является единственным разумным решением.
Ответ 2
Вы должны перебирать внутри объекта с помощью цикла for:
for(var i in foo){
alert(i); // alerts key
alert(foo[i]); //alerts key value
}
или
Object.keys(foo)
.forEach(function eachKey(key) {
alert(key); // alerts key
alert(foo[key]); // alerts value
});
Ответ 3
Вы можете получить доступ к каждой клавише индивидуально без повторения, как в:
var obj = { first: 'someVal', second: 'otherVal' };
alert(Object.keys(obj)[0]); // returns first
alert(Object.keys(obj)[1]); // returns second
Ответ 4
Учитывая ваш объект:
var foo = { 'bar' : 'baz' }
Чтобы получить bar
, используйте:
Object.keys(foo)[0]
Чтобы получить baz
, используйте:
foo[Object.keys(foo)[0]]
Предполагая, что один объект
Ответ 5
У меня была такая же проблема, и это то, что работало
//example of an Object
var person = {
firstName:"John",
lastName:"Doe",
age:50,
eyeColor:"blue"
};
//How to access a single key or value
var key = Object.keys(person)[0];
var value = person.firstName;
Ответ 6
Я не вижу ничего, кроме for (var key in foo)
.
Ответ 7
Нет другого способа, кроме for ... in
. Если вы не хотите использовать это (возможно, потому что он незначительно неэффективен для тестирования hasOwnProperty
на каждой итерации?), То используйте другую конструкцию, например. массив kvp's:
[{ key: 'key', value: 'value'}, ...]
Ответ 8
Самый простой способ - просто использовать Underscore.js:
клавиши
_. Ключи (объект) Извлеките все имена свойств объекта.
_. ключи ({один: 1, два: 2, три: 3}); = > [ "один", "два", "три" ]
Да, вам нужна дополнительная библиотека, но это так просто!
Ответ 9
Поскольку вы упомянули $.each()
, вот удобный подход, который будет работать в jQuery 1.6 +:
var foo = { key1: 'bar', key2: 'baz' };
// keys will be: ['key1', 'key2']
var keys = $.map(foo, function(item, key) {
return key;
});
Ответ 10
использовать для каждого цикла для доступа к ключам в Object или Maps в javascript
for(key in foo){
console.log(key);//for key name in your case it will be bar
console.log(foo[key]);// for key value in your case it will be baz
}
Примечание: вы также можете использовать
Object.keys(Foo);
он вам понравится
Выход:
[бар];
Ответ 11
Ну $.each
- это библиотека, тогда как for ... in
является нативной js, что должно быть лучше
Ответ 12
Object.keys()
Метод Object.keys() возвращает массив заданных объектов собственных перечислимых свойств в том же порядке, что и в цикле for for... in (разница заключается в том, что цикл for-in перечисляет свойства в цепочке прототипов как а).
var arr1 = Object.keys(obj);
Object.values ()
Метод Object.values () возвращает массив соответствующих значений свойств enumerable объекта в том же порядке, что и для цикла for for... in (разница заключается в том, что цикл for-in перечисляет свойства в цепочке прототипов также).
var arr2 = Object.values(obj);
Для получения более подробной информации пройдите здесь
Ответ 13
для показа в виде строки просто используйте:
console.log("they are: " + JSON.stringify(foo));