如何遍历 JavaScript 对象的属性名称?

75
我想从一个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;
}

1
抱歉,您能再清楚一些吗?您最终想要实现什么?您刚刚在对象内部创建了一个多维数组,谢谢。 - Mahesh Velaga
obj内的多维数组是一个错误。我想把以下JSON转换成表格。var obj = { 'players': [ { 'fname': 'joe', 'lname': 'smith', 'number': '34' }, { 'fname': 'jim', 'lname': 'jones', 'number': '12' }, { 'fname': 'jack', 'lname': 'Hoff', 'number': '84' } ] }; 谢谢 - eiu165
2个回答

123

使用for...in循环

for (var key in obj) {
   console.log(' name=' + key + ' value=' + obj[key]);

   // do some more stuff with obj[key]
}

这个行得通吗?我觉得你需要使用 'each'。 - ki9
1
当一个JSON对象只有一个属性时,如何在不迭代的情况下访问此属性的名称和值? - Gobliins
1
Object.keys(obj)[0] 可以获取到对象的键,然后你可以将其作为键来获取对应的值,例如 obj[Object.keys(obj)[0]]。但是我不确定你为什么要这样做? - joshuatvernon

46
在JavaScript 1.8.5中,Object.getOwnPropertyNames返回给定对象上直接找到的所有属性的数组。
Object.getOwnPropertyNames ( obj )

还有另一种方法Object.keys,它返回一个包含给定对象的自身可枚举属性名称的数组。

Object.keys( obj )

我使用 forEach 来列出对象中的值和键,与 for (var key in obj) .. 相同。

Object.keys(obj).forEach(function (key) {
      console.log( key , obj[key] );
});

这些都是ECMAScript的新特性,方法getOwnPropertyNameskeys不支持旧版本的浏览器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接