我有一个像
这样的JavaScript对象var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
如何获取此对象中的长度和键列表?
答案 0 :(得分:605)
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
var keys = Object.keys(obj);
console.log('obj contains ' + keys.length + ' keys: '+ keys);
现在大多数主流浏览器都是supported。
答案 1 :(得分:329)
var keys = [];
for(var k in obj) keys.push(k);
alert("total " + keys.length + " keys: " + keys);
答案 2 :(得分:24)
Underscore.js使转换变得非常干净:
var keys = _.map(x, function(v, k) { return k; });
编辑:我错过了你也可以这样做:
var keys = _.keys(x);
答案 3 :(得分:17)
如果您只想要特定于该特定对象的密钥而不是任何派生的prototype
属性:
function getKeys(obj) {
var r = []
for (var k in obj) {
if (!obj.hasOwnProperty(k))
continue
r.push(k)
}
return r
}
e.g:
var keys = getKeys({'eggs': null, 'spam': true})
var length = keys.length // access the `length` property as usual for arrays
答案 4 :(得分:3)
var keys = new Array();
for(var key in obj)
{
keys[keys.length] = key;
}
var keyLength = keys.length;
要从对象访问任何值,可以使用obj [key];
答案 5 :(得分:3)
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;
};
}());
}
答案 6 :(得分:3)
obj = {'a':'c','b':'d'}
您可以尝试:
[index for (index in obj)]
这将返回:
['a','b']
获取密钥列表 或
[obj[index] for (index in obj)]
获取值
答案 7 :(得分:2)
请注意,在coffeescript中,这可以在所有浏览器和节点中完成
k for k of obj
因此
(1 for _ of obj).length
答案 8 :(得分:2)
在JavaScript中,对象是具有属性和类型的独立实体。
要以数组形式从Object取值: 对象 .values(obj)// obj是您使用的对象名称 结果-> [“ value1”,“ value2”,“ value3”,“ value4”]
要以数组形式从Object获取键: 对象 .keys(obj)// obj是您使用的对象名称 结果-> [“ key1”,“ key2”,“ key3”,“ key4”]
由于两个函数都返回数组,因此您可以使用length属性获取键的长度或值。例如-对象 .values(obj).length 或 对象 .keys(obj).length
答案 9 :(得分:1)
对于列出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' */
答案 10 :(得分:1)
支持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;
};
答案 11 :(得分:1)
使用ES6,
您可以使用forEach
迭代对象的键。
要获取所有密钥,您可以使用Object.keys
返回对象中的所有密钥
Object.keys(obj).forEach(function(keyValue, index, map) {
console.log(keyValue);
});
上面代码片段的简写,只需要一个参数
Object.keys(obj).forEach(function(keyValue) {
console.log(keyValue);
});
答案 12 :(得分:1)
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
console.log(Object.keys(obj));
console.log(Object.keys(obj).length)
答案 13 :(得分:1)
使用Object.keys()
...这就是方法。
完整的文档可在下面链接的MDN网站上找到:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
答案 14 :(得分:1)
现代浏览器确实支持:
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));
答案 15 :(得分:0)
使用slice,apply和join方法。
var print = Array.prototype.slice.apply( obj );
alert('length='+print.length+' list'+print.join());
答案 16 :(得分:0)
如果您决定使用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);
答案 17 :(得分:0)
if(props.userType){
var data = []
Object.keys(props.userType).map(i=>{
data.push(props.userType[i])
})
setService(data)
}