假设我有一个JavaScript对象,有没有一种方法可以迭代所有的基本子属性?
例如,如果我有一个对象
{
foo: 17,
bar: {
a: 2,
b: 7
}
}
我希望能够遍历foo、bar.a和bar.b。请注意,我更喜欢使用Object.keys()来迭代,而不是使用for/in循环,尽管我相信我可以将任何for/in循环的响应转换为Object.keys()迭代。
假设我有一个JavaScript对象,有没有一种方法可以迭代所有的基本子属性?
例如,如果我有一个对象
{
foo: 17,
bar: {
a: 2,
b: 7
}
}
var x = {
foo: 17,
bar: {
a: 2,
b: 7
}
}
function parseObject(something) {
var keys = Object.keys(something);
for (var i = 0; i < keys.length; i++) {
if (typeof something[keys[i]] === 'object') parseObject(something[keys[i]])
else console.log(keys[i] + " : " + something[keys[i]]);
}
}
parseObject(x);
生成以下输出:
foo : 17
a : 2
b : 7
关于这个函数的说明。它递归遍历任何对象。例如,如果对象中有一个数组,您将为数组中的每个项目获得单独的行。
因此,对于以下对象:
var x = {
foo: 17,
bar: {
a: 2,
b: 7
},
foobar: [1,2,3]
}
foo : 17
a : 2
b : 7
0 : 1
1 : 2
2 : 3
something[keys[i]]
为 null
时,它会失败,因为 typeof null === 'object'
是真的。然后抛出的错误是 "Uncaught TypeError: Cannot convert undefined or null to object"。我会在原始条件中添加 if(something[keys[i]])
来确保它是真实的。 - Misael Abanto更新:以下是您可以通过以下一条链接中的方法实现它:
for (var key in validation_messages) {
var obj = validation_messages[key];
for (var prop in obj) {
alert(prop + " = " + obj[prop]);
}
}
这可能是一个重复的问题:
你可以在上面的帖子中找到你的答案。
typeof element === 'object';
进行递归调用。 - Mehdi Karamosly