Если у меня есть объект JS, например:
var foo = { 'bar' : 'baz' }
Если я знаю, что foo
имеет такую базовую структуру ключ/значение, но не знаю имени ключа, какой самый простой способ получить его? for ... in
? $.each()
? Надеюсь, есть что-то получше....
Вы бы шли внутри объекта с помощью цикла for:
for(var i in foo){
alert(i); // alerts key
alert(foo[i]); //alerts key's value
}
Или
Object.keys(foo)
.forEach(function eachKey(key) {
alert(key); // alerts key
alert(foo[key]); // alerts value
});
Если вы хотите получить все ключи, объекта в ECMAScript 5 введен.ключи
. Это поддерживается только новыми браузерами, а МДС документации предоставляет альтернативную реализацию (который также использует для...В кстати):
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;
}
Конечно, если вы хотите как ключ и значение, то для...в это единственное разумное решение.
Учитывая ваш объект:
var foo = { 'bar' : 'baz' }
Чтобы получить в <код>В баре</код> используйте:
Object.keys(foo)[0]
Чтобы получить в <код>баз</код> используйте:
foo[Object.keys(foo)[0]]
Предполагая, что один объект
А вкладыш для вас:
const OBJECT = {
'key1': 'value1',
'key2': 'value2',
'key3': 'value3',
'key4': 'value4'
};
const value = 'value2';
const key = Object.keys(OBJECT)[Object.values(OBJECT).indexOf(value)];
window.console.log(key); // = key2
У меня была такая же проблема, и это то, что работало
//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;
Самый простой способ-это просто использовать Underscore.js:
ключи
_.ключи(объекта) извлечения всех имен объекта's свойства.
_.ключи({один : 1, два-2, Три : 3}); => ["один и", "от двух" В, С "три"]
Да, вам нужна дополнительная библиотека, но это's так легко!
Объекта.ключи() Объект.ключи() метод возвращает массив данного объекта's собственное перечисляемые свойства, в том же порядке, как это предусмотрено для...в цикл (разница в том, что для-в петлю перечисляет свойства в цепочке прототипов, а).
var arr1 = Object.keys(obj);
Объекта.значения() Объект.values() метод возвращает массив данного объекта's собственное перечислимых значений свойств, в том же порядке, как это предусмотрено для...в цикл (разница в том, что для-в петлю перечисляет свойства в цепочке прототипов, а также).
var arr2 = Object.values(obj);
Для больше, пожалуйста, перейдите здесь
Поскольку вы упомянули $.каждый()
, здесь'ы удобный подход, который будет работать в jQuery 1.6+:
var foo = { key1: 'bar', key2: 'baz' };
// keys will be: ['key1', 'key2']
var keys = $.map(foo, function(item, key) {
return key;
});
Нет другого способа, кроме как for ... in
. Если вы не хотите использовать этот способ (возможно, потому что это крайне неэффективно проверять hasOwnProperty
на каждой итерации?), то используйте другую конструкцию, например, массив kvp'ов:
[{ key: 'key', value: 'value'}, ...]
использовать для каждой петли для доступа к ключам в объект или карты в 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
}
Примечание: Вы также можете использовать
объект.ключи(ФОО);
это даст вам такой выход:
[бар];
для показа как строку, просто использовать:
console.log("they are: " + JSON.stringify(foo));