Javascript 对于对象中的对象中的循环
有人能解释一下为什么这个不行吗 一个对象中有两个对象。我使用for循环逐个打印嵌套对象中的每个属性Javascript 对于对象中的对象中的循环,javascript,Javascript,有人能解释一下为什么这个不行吗 一个对象中有两个对象。我使用for循环逐个打印嵌套对象中的每个属性 var people = { john: { name: "John", age: 20 }, bob: { name: "Bob", age: 40 } }; for (var person in people) { for (var property in person) {
var people = {
john: {
name: "John",
age: 20
},
bob: {
name: "Bob",
age: 40
}
};
for (var person in people) {
for (var property in person) {
console.log(property);
}
}
我希望它能打印出来:
name
age
name
age
相反,我得到:
0
1
2
3
0
1
2
1) 我做错了什么
2) 控制台到底是如何输出上述数字的?这是因为在第二个(嵌套的)
for
循环中,您迭代了字符串值person
变量,这些变量包含person
对象的属性名(不是值!)。您应该将其更改为person[person]
:
for (var property in people[person]) {
console.log(property);
}
上面的数字对应于字符串值中的字符索引:
0: j 0: b
1: o 1: o
2: h 2: b
3: n
按照vision上面所说的方法打印属性,使用下面的方法获得实际VAL 您需要指定值,而不仅仅是索引,这正是for在中所做的。你需要像这样做
for (var person in people) {
for (var property in people[person]) {
console.log(people[person][property]);
}
}
在中为..执行
时,您是在迭代键,而不是值
在for(var person In people)
中,person
是一个字符串;每个键:“john”
和“bob”
在第二个循环中,您将迭代该字符串的所有属性,这将打印字符串中的“索引”(您可以访问数组string[1]
)之类的字符串)
您需要先获取对象值,然后才能对其进行循环:
for (var person in people) {
var thisPerson = people[person];
for (var property in thisPerson) {
console.log(property);
}
}
这不会打印他的预期输出,它会打印姓名和年龄,而不是单词“姓名”和“年龄”。是的,我一开始误解了这个问题。实际上,数字对应于john
和bob
的索引:-P@RocketHazmat啊,是的!我把一切都弄混了:D