我如何循环遍历嵌套对象,使用for in循环并返回连接的每个属性字符串?

时间:2016-11-14 21:48:51

标签: javascript string object

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

最终输出是:" John P. Doe"

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

6 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

这些类型的问题已经发布了数百万次,在询问之前做了一些研究。

反正:

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

答案 2 :(得分:0)

您可以将object.reduce用于此

检查此代码段

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);

希望有所帮助

答案 3 :(得分:0)

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



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(' '));




答案 4 :(得分:0)

您可以使用解构分配

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);

答案 5 :(得分:0)

正如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]);
        }
    });
}