如何从包含嵌套对象的javascript对象文字中获取所有属性名称?

时间:2014-03-28 03:24:32

标签: javascript object-literal

例如,如果我有这个javascript对象文字:

var foo = {
    a: '1',
    b: {
        doit: function toit(){},
        c: true,
        d: {
          x: true,
          y: true
        }
    }
}

如何获取所有属性名称的数组?如:

['a', 'b', 'doit', 'c', 'd', 'x', 'y']

4 个答案:

答案 0 :(得分:0)

您可以使用此递归功能

function recursiveKeyFinder(object, result) {
    for (var key in object) {
        result.push(key);
        if (Object(object[key]).toString() === "[object Object]") {
            recursiveKeyFinder(object[key], result);
        }
    }
    return result;
}

console.log(recursiveKeyFinder(foo, []));
# [ 'a', 'b', 'doit', 'c', 'd', 'x', 'y' ]

答案 1 :(得分:0)

您可以使用for in循环遍历所有属性并将它们推送到数组。

> 
for (var key in foo) {
   var obj = foo[key];
   for (var prop in obj) {
      // important check that this is objects own property 
      // not from prototype prop inherited
      if(obj.hasOwnProperty(prop)){
        arr.push(prop);
      }
   }
}

答案 2 :(得分:0)

试试这个:(递归函数)

var foo = {
    a: '1',
    b: {
        doit: function toit(){},
        c: true,
        d: {
          x: true,
          y: true
        }
    }
};

var getKeys = function ( foo ) {
    var bar = [];

    for ( var key in foo ) {
        var _foo = foo [ key ];
        bar.push ( key );
        if ( typeof _foo === 'object') {
            var _bar = getKeys ( foo [key] );
            for (var _key in _bar ) {
                bar.push ( _bar[_key] );
            }

        }
    }

    return bar;
};


var bar = getKeys ( foo );

alert ( bar );

在此演示:JSFiddle

答案 3 :(得分:0)

这样的功能可以完成这项工作:

function getKeysRecursive(obj)
{
  var keys = [];

  (function r(obj) {
    Object.keys(obj).forEach(function(key) {
      keys.push(key);
      if (obj[key] instanceof Object) {
        r(obj[key]);
      }
    });
  }(obj));

  return keys;
}

Demo