如何遍历 Javascript 对象的属性名称?
Posted
技术标签:
【中文标题】如何遍历 Javascript 对象的属性名称?【英文标题】:How to iterate through property names of Javascript object? 【发布时间】:2010-12-24 23:48:01 【问题描述】:我想从 javascript 对象中获取属性名称以动态构建表。示例:
var obj = 'fname': 'joe', 'lname': 'smith', 'number': '34';
for (var i = 0; i < obj.properties.length; i++)
alert(' name=' + obj.properties[i].name + ' value=' + obj.properties[i].value);
会提醒:
name=fname value=joe
name=lname value=smith
name=number value=34
然后我可以使用这样的对象构建一个表:
var obj = 'players': [
'fname': 'joe', 'lname': 'smith', 'number': '34' ,
'fname': 'jim', 'lname': 'Hoff', 'number': '12' ,
'fname': 'jack', 'lname': 'jones', 'number': '84'
] ;
生产:
| fname | lname | number |
|-------|--------|---------|
| joe | smith | 34 |
| jim | Hoff | 12 |
| jack | jones | 84 |
更新
感谢回答,我使用标题列表中第一个对象的属性名称从 Javascript 对象生成了一个表:
function renderData()
var obj = 'players': [
'fname': 'joe', 'lname': 'smith', 'number': '34' ,
'fname': 'jim', 'lname': 'jones', 'number': '12' ,
'fname': 'jack', 'lname': 'Hoff', 'number': '84'
] ;
var cols = GetHeaders(obj);
$('#Output').html(CreateTable(obj, cols));
function CreateTable(obj, cols)
var table = $('<table></table>');
var th = $('<tr></tr>');
for (var i = 0; i < cols.length; i++)
th.append('<th>' + cols[i] + '</th>');
table.append(th);
for (var j = 0; j < obj.players.length; j++)
var player = obj.players[j];
var tr = $('<tr></tr>');
for (var k = 0; k < cols.length; k++)
var columnName = cols[k];
tr.append('<td>' + player[columnName] + '</td>');
table.append(tr);
return table;
function GetHeaders(obj)
var cols = new Array();
var p = obj.players[0];
for (var key in p)
//alert(' name=' + key + ' value=' + p[key]);
cols.push(key);
return cols;
【问题讨论】:
抱歉,您能否说得更清楚一些,您最后想要实现的目标是什么?您刚刚在 obj 中创建了一个多维数组,谢谢 obj 中的多维数组是错误的。我想将以下 JSON 转换为表格。 var obj = 'players': [ 'fname': 'joe', 'lname': 'smith', 'number': '34' , 'fname': 'jim', 'lname': 'jones ', 'number': '12' , 'fname': 'jack', 'lname': 'Hoff', 'number': '84' ] ;谢谢 【参考方案1】:使用for...in
loop:
for (var key in obj)
console.log(' name=' + key + ' value=' + obj[key]);
// do some more stuff with obj[key]
【讨论】:
这行得通吗?我以为你需要'each'。 当一个json对象只有一个属性时,如何不迭代访问该属性的名称和值?Object.keys(obj)[0]
将为您获取密钥,然后您可以将其用作获取值的密钥,例如obj[Object.keys(obj)[0]]
。 . .我不知道你为什么要这样做?【参考方案2】:
在 JavaScript 1.8.5 中,Object.getOwnPropertyNames
返回直接在给定对象上找到的所有属性的数组。
Object.getOwnPropertyNames ( obj )
还有另一个方法Object.keys
,它返回一个数组,其中包含所有给定对象的自己的可枚举属性的名称。
Object.keys( obj )
我用forEach
列出obj中的值和键,和for (var key in obj) ..
一样
Object.keys(obj).forEach(function (key)
console.log( key , obj[key] );
);
这都是ECMAScript的新特性,方法getOwnPropertyNames
,keys
不支持旧浏览器。
【讨论】:
以上是关于如何遍历 Javascript 对象的属性名称?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JavaScript 中给定其字符串名称设置对象属性(对象属性的..)?