【问题标题】:How can i loop through a nested object, using the for in loop and return each property string concatenated?如何使用 for in 循环遍历嵌套对象并返回连接的每个属性字符串?
【发布时间】:2016-11-14 21:48:50
【问题描述】:

例如,我想将 first、middle 和 last 的属性值打印为串联字符串。

最终输出为:“John P. Doe”

var  person = {
    name: {
        first: 'John',
        middle: 'P',
        last: 'Doe'
    },
    age: 35,
    homeTown: 'Nashville, TN'
};

【问题讨论】:

标签: javascript string object


【解决方案1】:

您不需要循环,只需连接属性即可。

var fullname = person.name.first + ' ' + person.name.middle + ' ' + person.name.last;

使用for-in 循环不是一个好主意,因为不能保证对象保持其顺序。所以你最终可能会改用Doe John P.

【讨论】:

  • 谢谢巴玛!!对编程很陌生。没有意识到我可以连接它们。这非常有用!
  • 您应该通过单击旁边的复选标记来接受解决您问题的答案。
【解决方案2】:

此类问题已发布数百万次,请在提问前进行一些研究。

无论如何:

alert(person.name.first + ' ' + person.name.middle + ' ' + person.name.last);

【讨论】:

    【解决方案3】:

    您可以为此使用 object.reduce

    检查这个sn-p

    var person = {
      name: {
        first: 'John',
        middle: 'P',
        last: 'Doe'
      },
      age: 35,
      homeTown: 'Nashville, TN'
    };
    
    
    var nameObject = person.name;
    
    var fullname = Object.keys(nameObject).reduce(function(previous, key) {
      return previous +" "+ nameObject[key];
    }, "");
    
    console.log(fullname);

    希望对你有帮助

    【讨论】:

      【解决方案4】:

      您可以为所需的属性名称使用数组(这样可以保持顺序)并映射值并将其连接到空格分隔的字符串。

      var  person = { name: { first: 'John', middle: 'P', last: 'Doe' }, age: 35, homeTown: 'Nashville, TN' };
      
      console.log(['first', 'middle', 'last'].map(function (k) {
          return person.name[k];
      }).join(' '));

      【讨论】:

        【解决方案5】:

        你可以使用解构赋值

        var  person = {
            name: {
                first: 'John',
                middle: 'P',
                last: 'Doe'
            },
            age: 35,
            homeTown: 'Nashville, TN'
        };
        
        var {first, middle, last} = person.name;
        
        var fullname = `${first} ${middle} ${last}`;
        
        console.log(fullname);

        【讨论】:

          【解决方案6】:

          正如 Barmar 的回答所暗示的,您的示例只需要一个简单的串联即可为您提供结果。

          但是,在更一般的情况下,您可能希望遍历对象的每个属性,如果该属性是对象,则还要遍历该对象。

          例如:

          function iterateThroughAllProperties(obj) {
              Object.keys(obj).forEach(function(key, index) {
                  if(typeof obj[key] !== null && typeof obj[key] === 'object') {
                      iterateThroughAllProperties(obj[key]);
                  }
                  else {
                      // Do something with the property.
                      console.log(obj[key]);
                  }
              });
          }
          

          【讨论】:

          • 感谢 Sesh!在我意识到它是多么简单之前,我一直在思考这个解决方案的思路。我肯定会研究它。
          猜你喜欢
          • 2010-11-07
          • 1970-01-01
          • 1970-01-01
          • 2019-12-01
          • 2014-06-29
          • 1970-01-01
          • 2014-01-29
          • 2011-07-08
          • 2021-07-16
          相关资源
          最近更新 更多