获取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; };