我有一个JavaScript对象,例如
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
如何获得此对象中键的长度和列表?
我有一个JavaScript对象,例如
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
如何获得此对象中键的长度和列表?
Answers:
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);
Object.prototype
,无论如何都不应该这样做。但是,对于自定义构造函数,您是对的。
[]
给它(或array()
返回它)会使其成为一个数组,然后可以安全地用作数组。
var obj = {
key1: 'value1',
key2: 'value2',
key3: 'value3',
key4: 'value4'
}
var keys = Object.keys(obj);
console.log('obj contains ' + keys.length + ' keys: '+ keys);
现在大多数主流浏览器都支持它。
for(key in ob)
!不同。Object.keys
不会列出原型中的键,但是.. in obj
会列出。
Underscore.js使转换非常干净:
var keys = _.map(x, function(v, k) { return k; });
编辑:我想念你也可以这样做:
var keys = _.keys(x);
obj = {'a':'c','b':'d'}
你可以试试:
[index for (index in obj)]
这将返回:
['a','b']
获取键列表或
[obj[index] for (index in obj)]
获得价值
阿努拉格人的回答基本上是正确的。但是,为了也支持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;
};
}());
}
使用Object.keys()
...这是要走的路。
完整的文档可在下面链接的MDN网站上找到:
https://developer.mozilla.org/zh-CN/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);
if(props.userType){
var data = []
Object.keys(props.userType).map(i=>{
data.push(props.userType[i])
})
setService(data)
}
使用切片,应用和联接方法。
var print = Array.prototype.slice.apply( obj );
alert('length='+print.length+' list'+print.join());