通过对象迭代 JavaScript

iterations thru objects JavaScript

大家好,我有一个关于对象迭代的简短问题

这是我的代码 [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 次以及如何每人做一次

谢谢

你只需要一个 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]);
}

您正在使用两个循环。外层循环迭代所有 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));

在现代浏览器或节点中可以使用 Object.values() 其中 returns 数组。

var names = {
  first: 'Sasha',
  second: 'Andrey',
  third: 'Pasha',

  lastnames: {
    firstL: 'Oga',
    secondL: 'opa',
    thirdL: 'uka'
  }
}

console.log(Object.values(names.lastnames).join());