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