鉴于我有一个 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
}
}
我想遍历 foo、bar.a 和 bar.b。
请记住,我更喜欢迭代 Object.keys() 而不是使用 for/in 循环,尽管我确信我可以将任何 for/in 循环响应转换为 Object.keys() 迭代。
您可以使用这样的递归函数:
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
显然有很多方法可以处理这个问题,但您需要调整功能以满足您的要求。
更新:您可以这样做(取自以下链接之一):
for (var key in validation_messages) {
var obj = validation_messages[key];
for (var prop in obj) {
alert(prop + " = " + obj[prop]);
}
}
这是一个可能的副本:
你可以在上面的帖子中找到你的答案。