【问题标题】:iterations thru objects JavaScript遍历对象 JavaScript
【发布时间】:2017-12-17 09:05:43
【问题描述】:
大家好,我有一个关于对象迭代的简短问题
这是我的代码
[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]);
}
}
我的目标是记录一次所有的lastNAmesoga, opa, uka,现在我的结果是每个姓氏的 4 次,你能解释一下为什么现在是 4 次以及如何每一个都做一次
谢谢
【问题讨论】:
标签:
javascript
object
iteration
for-in-loop
【解决方案1】:
您正在使用两个循环。外部循环迭代所有names 对象键,即first, second, third and lastnames。当内部循环遍历names.lastnames 时,它们中的每一个都将被记录在外部循环的每次迭代中。做你想做的事,只需删除外循环:
for( var newKeys in names.lastnames){
console.log(names.lastnames[newKeys]);
}
如果您在实际代码中使用它,请确保在使用 for in 循环时检查 hasOwnProperty:
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));
【解决方案2】:
你只需要一个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]);
}
【解决方案3】:
在现代浏览器或节点中可以使用Object.values(),它返回一个数组。
var names = {
first: 'Sasha',
second: 'Andrey',
third: 'Pasha',
lastnames: {
firstL: 'Oga',
secondL: 'opa',
thirdL: 'uka'
}
}
console.log(Object.values(names.lastnames).join());