如何从包含嵌套对象的javascript对象文本中获取所有属性名?
例如,如果我有以下javascript对象文字:如何从包含嵌套对象的javascript对象文本中获取所有属性名?,javascript,object-literal,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'] 您可以使用这个递归函数 fun
var foo = {
a: '1',
b: {
doit: function toit(){},
c: true,
d: {
x: true,
y: true
}
}
}
如何获取所有属性名称的数组?例如:
['a', 'b', 'doit', 'c', 'd', 'x', 'y']
您可以使用这个递归函数
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' ]
可以使用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);
}
}
}
试试这个:(递归函数)
此处演示:这样的函数可以完成以下任务:
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;
}
For in循环将非常适合于此。这里有一个关于它们的链接
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;
}