Search code examples
javascriptloopsobject

How to iterate through property names of JavaScript object?


I would like to get the property names from a JavaScript object to build a table dynamically.

For example:

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);
}

This would print:

name=fname value=joe

name=lname value=smith

name=number value=34

Then I could build a table using objects like this one:

var obj = { 'players': [
     { 'fname': 'joe', 'lname': 'smith', 'number': '34'} ,
     { 'fname': 'jim', 'lname': 'Hoff', 'number': '12'} ,
     { 'fname': 'jack', 'lname': 'jones', 'number': '84'}
] };

To produce:

| fname |  lname |  number |
|-------|--------|---------|
| joe   | smith  |      34 |
| jim   | Hoff   |      12 |
| jack  | jones  |      84 |

UPDATE

Thanks to the answer, I have produced a table from the JavaScript objects using the property names from the first object in the list for the headers:

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;
}

Solution

  • Use for...in loop:

    for (var key in obj) {
       console.log(' name=' + key + ' value=' + obj[key]);
    
       // do some more stuff with obj[key]
    }