【问题标题】:How to iterate through property names of Javascript object?如何遍历 Javascript 对象的属性名称?
【发布时间】: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' } ] };谢谢

标签: javascript loops object


【解决方案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不支持旧浏览器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 2012-01-08
    相关资源
    最近更新 更多