大家好,我有一个关于对象迭代的简短问题
这是我的代码 [https://jsfiddle.net/Ar2zee/9g91ouq6/]
var names = {
first: 'Sasha',
second: 'Andrey',
third: 'Pasha',
lastnames: {
firstL: 'Oga',
secondL: 'opa',
thirdL: 'uka'
},
}
for (var keys in names) {
for (var newKeys in names.lastnames) {
console.log(names.lastnames[newKeys]);
}
}
我的目标是记录所有lastNAmes
oga, opa, uka
,现在我的结果是每个姓氏的4倍你能解释为什么它现在是4次以及如何制作一次他们每个人
谢谢
答案 0 :(得分:1)
您正在使用两个循环。外部循环迭代所有names
个对象键,即first, second, third and lastnames
。当内循环遍历names.lastnames
时,它们中的每一个都将在外循环的每次迭代中被记录。要做你想做的事,只需删除外部循环:
for( var newKeys in names.lastnames){
console.log(names.lastnames[newKeys]);
}
如果您在现实代码中使用此功能,请务必在使用hasOwnProperty
循环时检查for in
:
for( var newKeys in names.lastnames){
if (names.lastnames.hasOwnProperty(newKeys)) console.log(names.lastnames[newKeys]);
}
旁注:
如果您只想获取names.lastnames中的所有值,还可以使用Object.values()
:
var names = {
first: 'Sasha',
second: 'Andrey',
third: 'Pasha',
lastnames: {
firstL: 'Oga',
secondL: 'opa',
thirdL: 'uka'
}
};
console.log(Object.values(names.lastnames));

答案 1 :(得分:0)
您只需要一个for
循环:
var names = {
first: 'Sasha',
second: 'Andrey',
third: 'Pasha',
lastnames: {
firstL: 'Oga',
secondL: 'opa',
thirdL: 'uka'
},
}
for (var key in names.lastnames) {
console.log(names.lastnames[key]);
}
答案 2 :(得分:0)
在现代浏览器或节点中,可以使用返回数组的Object.values()
。
var names = {
first: 'Sasha',
second: 'Andrey',
third: 'Pasha',
lastnames: {
firstL: 'Oga',
secondL: 'opa',
thirdL: 'uka'
}
}
console.log(Object.values(names.lastnames).join());