如何遍历Javascript对象的属性名称?
我想从Javascript对象中获取属性名称来dynamic地构build表。 例:
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
然后我可以使用这样的对象来build立一个表格:
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 |
UPDATE
感谢这个答案,我从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; }
for...in
循环中 :
for (var key in obj) { console.log(' name=' + key + ' value=' + obj[key]); // do some more stuff with obj[key] }
在JavaScript 1.8.5中, Object.getOwnPropertyNames
返回直接在给定对象上find的所有属性的数组。
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中的新function,方法getOwnPropertyNames
, keys
将不支持旧浏览器。