获取JavaScript对象键列表
我有一个JavaScript对象
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 
 obj = {'a':'c','b':'d'} 
你可以试试:
 [index for (index in obj)] 
这将返回:
 ['a','b'] 
获取密钥列表或
 [obj[index] for (index in obj)] 
获得价值
 var keys = new Array(); for(var key in obj) { keys[keys.length] = key; } var keyLength = keys.length; 
要从对象中访问任何值,可以使用obj [key];
请注意,在coffeescript中,这可以在所有浏览器和节点中完成
 k for k of obj 
因此
 (1 for _ of obj).length 
  Anurags的回答基本上是正确的。 但是为了在旧版浏览器中支持Object.keys(obj) ,你也可以使用下面的代码,它是从https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/键; 。 如果浏览器不可用,则添加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; }; }()); } 
对于列出JSON对象的键的逗号分隔的string,请尝试以下操作:
 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' */ 
使用切片,应用和连接方法。
 var print = Array.prototype.slice.apply( obj ); alert('length='+print.length+' list'+print.join()); 
针对支持ECMAScript 5的浏览器的recursion解决scheme:
 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; };