迭代通过对象JavaScript

时间:2017-07-12 19:31:35

标签: javascript object iteration for-in-loop

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

这是我的代码 [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次以及如何制作一次他们每个人

谢谢

3 个答案:

答案 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());