How do I access properties of a javascript object if I don't know the names?

前端 未结 8 1356
囚心锁ツ
囚心锁ツ 2020-11-28 18:49

Say you have a javascript object like this:

var data = { foo: \'bar\', baz: \'quux\' };

You can access the properties by the property name:

相关标签:
8条回答
  • 2020-11-28 19:11

    You can use Object.keys(), "which returns an array of a given object's own enumerable property names, in the same order as we get with a normal loop."

    You can use any object in place of stats:

    var stats = {
      a: 3,
      b: 6,
      d: 7,
      erijgolekngo: 35
    }
    /*  this is the answer here  */
    for (var key in Object.keys(stats)) {
      var t = Object.keys(stats)[key];
      console.log(t + " value =: " + stats[t]);
    }

    0 讨论(0)
  • 2020-11-28 19:13

    Old versions of JavaScript (< ES5) require using a for..in loop:

    for (var key in data) {
      if (data.hasOwnProperty(key)) {
        // do something with key
      }
    }
    

    ES5 introduces Object.keys and Array#forEach which makes this a little easier:

    var data = { foo: 'bar', baz: 'quux' };
    
    Object.keys(data); // ['foo', 'baz']
    Object.keys(data).map(function(key){ return data[key] }) // ['bar', 'quux']
    Object.keys(data).forEach(function (key) {
      // do something with data[key]
    });
    

    ES2017 introduces Object.values and Object.entries.

    Object.values(data) // ['bar', 'quux']
    Object.entries(data) // [['foo', 'bar'], ['baz', 'quux']]
    
    0 讨论(0)
  • 2020-11-28 19:18

    You can loop through keys like this:

    for (var key in data) {
      console.log(key);
    }
    

    This logs "Name" and "Value".

    If you have a more complex object type (not just a plain hash-like object, as in the original question), you'll want to only loop through keys that belong to the object itself, as opposed to keys on the object's prototype:

    for (var key in data) {
      if (data.hasOwnProperty(key)) {
        console.log(key);
      }
    }
    

    As you noted, keys are not guaranteed to be in any particular order. Note how this differs from the following:

    for each (var value in data) {
      console.log(value);
    }
    

    This example loops through values, so it would log Property Name and 0. N.B.: The for each syntax is mostly only supported in Firefox, but not in other browsers.

    If your target browsers support ES5, or your site includes es5-shim.js (recommended), you can also use Object.keys:

    var data = { Name: 'Property Name', Value: '0' };
    console.log(Object.keys(data)); // => ["Name", "Value"]
    

    and loop with Array.prototype.forEach:

    Object.keys(data).forEach(function (key) {
      console.log(data[key]);
    });
    // => Logs "Property Name", 0
    
    0 讨论(0)
  • 2020-11-28 19:21
    function getDetailedObject(inputObject) {
        var detailedObject = {}, properties;
    
        do {
            properties = Object.getOwnPropertyNames( inputObject );
            for (var o in properties) {
                detailedObject[properties[o]] = inputObject[properties[o]];
            }
        } while ( inputObject = Object.getPrototypeOf( inputObject ) );
    
        return detailedObject;
    }
    

    This will get all properties and their values (inherited or own, enumerable or not) in a new object. original object is untouched. Now new object can be traversed using

    var obj = { 'b': '4' }; //example object
    var detailedObject = getDetailedObject(obj);
    for(var o in detailedObject) {
        console.log('key: ' + o + '   value: ' + detailedObject[o]);
    }
    
    0 讨论(0)
  • 2020-11-28 19:27
    var obj = {
     a: [1, 3, 4],
     b: 2,
     c: ['hi', 'there']
     }
    for(let r in obj){  //for in loop iterates all properties in an object
     console.log(r) ;  //print all properties in sequence
     console.log(obj[r]);//print all properties values
    }
    
    0 讨论(0)
  • 2020-11-28 19:28
    for(var property in data) {
        alert(property);
    }
    
    0 讨论(0)
提交回复
热议问题