获取JavaScript对象键列表

我有一个JavaScript对象

var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}

我怎么能得到这个对象中的键的长度和列表?

391230 次浏览

var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
};
var keys = [];


for (var k in obj) keys.push(k);


console.log("total " + keys.length + " keys: " + keys);

var keys = new Array();
for(var key in obj)
{
keys[keys.length] = key;
}


var keyLength = keys.length;

要从对象中访问任何值,可以使用obj[key];

var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
var keys = Object.keys(obj);
console.log('obj contains ' + keys.length + ' keys: '+  keys);

现在大多数主流浏览器上都是支持

如果你只想要特定于特定对象的键,而不是任何派生的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']

获取键的列表 或者< / p >

[obj[index] for (index in obj)]

来得到这些值

js使得转换非常简洁:

var keys = _.map(x, function(v, k) { return k; });

编辑:我忽略了你也可以这样做:

var keys = _.keys(x);

注意,在coffeescript中,这可以在所有浏览器和节点as中完成

k for k of obj

因此

(1 for _ of obj).length

使用切片、应用和连接方法。

var print = Array.prototype.slice.apply( obj );
alert('length='+print.length+' list'+print.join());

对于以逗号分隔的字符串列出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' */
Anurags的答案基本上是正确的。 但是要在旧的浏览器中支持Object.keys(obj),你可以使用下面的代码从 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys . 如果浏览器中没有Object.keys(obj)方法,它会添加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;
};
}());
}

支持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 < p >, 你可以使用forEach来遍历对象的键。 要获得所有的键,可以使用Object.keys,它返回Object

中的所有键
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)

使用Object.keys()……这是正确的方法。

完整的文档可以在MDN网站上找到,链接如下:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

如果你决定使用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中获取值: __abc .values(obj) // obj是你使用的对象名称 结果< / em > - >[“value1”、“value2”,“value3”,“value4”)

用于以数组形式从Object中获取键: 对象.keys(obj) // obj是你使用的对象名称 Result -> ["key1", "key2", "key3", "key4"]

由于两个函数都返回数组,您可以使用length属性获取键或值的长度。例如- __abc .values(obj)。 .keys(obj).length

       if(props.userType){
var data = []
Object.keys(props.userType).map(i=>{
data.push(props.userType[i])
})
setService(data)
}

现代浏览器支持:

var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
console.log(Object.keys(obj));
// we can also get values
console.log(Object.values(obj));