Лучший способ получить ключ от 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));