例如,如果我有这个javascript对象文字:
var foo = {
a: '1',
b: {
doit: function toit(){},
c: true,
d: {
x: true,
y: true
}
}
}
如何获取所有属性名称的数组?如:
['a', 'b', 'doit', 'c', 'd', 'x', 'y']
答案 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;
}