У меня есть объект JavaScript, например
var obj = {
   key1: 'value1',
   key2: 'value2',
   key3: 'value3',
   key4: 'value4'
}
Как я могу получить длину и список ключей в этом объекте?
У меня есть объект JavaScript, например
var obj = {
   key1: 'value1',
   key2: 'value2',
   key3: 'value3',
   key4: 'value4'
}
Как я могу получить длину и список ключей в этом объекте?
var obj = {
   key1: 'value1',
   key2: 'value2',
   key3: 'value3',
   key4: 'value4'
};
var keys = [];
for (var k in obj) keys.push(k);
alert("total " + keys.length + " keys: " + keys);
var obj = {
   key1: 'value1',
   key2: 'value2',
   key3: 'value3',
   key4: 'value4'
}
var keys = Object.keys(obj);
console.log('obj contains ' + keys.length + ' keys: '+  keys);Underscore.js делает преобразование довольно чистым:
var keys = _.map(x, function(v, k) { return k; });
Изменить: я пропустил, что вы тоже можете это сделать:
var keys = _.keys(x);
Если вам нужны только ключи, специфичные для этого конкретного объекта, а не любые производные свойства prototype:
function getKeys(obj) {
    var r = []
    for (var k in obj) {
        if (!obj.hasOwnProperty(k)) 
            continue
        r.push(k)
    }
    return r
}
например:
var keys = getKeys({'eggs': null, 'spam': true})
var length = keys.length // access the `length` property as usual for arrays
var keys = new Array();
for(var key in obj)
{
   keys[keys.length] = key;
}
var keyLength = keys.length;
для доступа к любому значению из объекта, вы можете использовать obj [key];
obj = {'a':'c','b':'d'}
Вы можете попробовать:
[index for (index in obj)] 
это вернет:
['a','b']
чтобы получить список ключей или
[obj[index] for (index in obj)]
чтобы получить значения
Ответ Anurags в основном правильный.
Но для поддержки Object.keys(obj) в старых браузерах вы также можете использовать приведенный ниже код, который копируется из
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
, Он добавляет метод Object.keys(obj), если он недоступен в браузере.
if (!Object.keys) {
 Object.keys = (function() {
 'use strict';
 var hasOwnProperty = Object.prototype.hasOwnProperty,
    hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'),
    dontEnums = [
      'toString',
      'toLocaleString',
      'valueOf',
      'hasOwnProperty',
      'isPrototypeOf',
      'propertyIsEnumerable',
      'constructor'
    ],
    dontEnumsLength = dontEnums.length;
return function(obj) {
  if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
    throw new TypeError('Object.keys called on non-object');
  }
  var result = [], prop, i;
  for (prop in obj) {
    if (hasOwnProperty.call(obj, prop)) {
      result.push(prop);
    }
  }
  if (hasDontEnumBug) {
    for (i = 0; i < dontEnumsLength; i++) {
      if (hasOwnProperty.call(obj, dontEnums[i])) {
        result.push(dontEnums[i]);
      }
    }
  }
  return result;
};
}());
}
Обратите внимание, что в coffeescript это может быть выполнено во всех браузерах и node как
k for k of obj
и, следовательно,
(1 for _ of obj).length
 Используйте Object.keys()... это путь.
Полная документация доступна на сайте MDN, приведенном ниже:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
Для строки с разделителями-запятыми, в которых перечислены ключи объекта JSON, попробуйте выполнить следующее:
function listKeys(jObj){
    var keyString = '';
    for(var k in jObj){
        keyString+=(','+k);
    }
    return keyString.slice(1);
}
/* listKeys({'a' : 'foo', 'b' : 'foo', 'c' : 'foo'}) -> 'a,b,c' */
Рекурсивное решение для браузеров, поддерживающих ECMAScript 5:
var getObjectKeys = function(obj) {
    var keys = Object.keys(obj);
    var length = keys.length;
    if (length !== 0) {
        for (var i = 0; i < length; i++) {
            if (typeof obj[keys[i]] === 'object') {
                keys[keys[i]] = getObjectKeys(obj[keys[i]]);
            }
        }
    }
    return keys;
};
 Используя ES6, вы можете использовать forEach для итерации над ключами объекта. Чтобы получить все ключи, вы можете использовать Object.keys который возвращает все ключи в объекте
Object.keys(obj).forEach(function(keyValue, index, map) { 
  console.log(keyValue); 
});
Короткая комбинация вышеприведенного фрагмента будет иметь, который принимает только один параметр
Object.keys(obj).forEach(function(keyValue) { 
  console.log(keyValue); 
});
var obj = {
   key1: 'value1',
   key2: 'value2',
   key3: 'value3',
   key4: 'value4'
}
console.log(Object.keys(obj));
console.log(Object.keys(obj).length)
Если вы решили использовать Underscore.js, лучше
var obj = {
    key1: 'value1',
    key2: 'value2',
    key3: 'value3',
    key4: 'value4'
}
var keys = [];
_.each( obj, function( val, key ) {
    keys.push(key);
});
console.log(keys.lenth, keys);
В JavaScript объект - это отдельная сущность со свойствами и типом.
Для получения значений из объекта в виде массива: Object.values(obj)//obj - это имя объекта, которое вы использовали Результат → ["значение1", "значение2", "значение3", "значение4"]
Для получения ключей от объекта в виде массива: Object.keys(obj)//obj - это имя объекта, которое вы использовали Результат → ["key1", "key2", "key3", "key4"]
Поскольку обе функции возвращают массив, вы можете получить длину ключей или значение, используя свойство length. Например - Object.values(obj).length или Object.keys(obj).length
используя метод slice, apply и join.
var print = Array.prototype.slice.apply( obj );
alert('length='+print.length+' list'+print.join());