【问题标题】: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());

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-15
          • 1970-01-01
          • 2012-10-13
          • 1970-01-01
          • 2021-05-08
          • 2020-04-07
          相关资源
          最近更新 更多