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

How can i loop through a nested object, using the for in loop and return each property string concatenated?

本文关键字:循环 连接 返回 in 字符串 属性 for 使用 何循环 遍历 对象      更新时间:2023-09-26

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

最终输出为:"John p . Doe"

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

不需要循环,只需将属性连接起来。

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

使用for-in循环将是一个坏主意,因为对象不能保证保持它们的顺序。所以你可能会用Doe John P.代替。

这类问题已经被发布了数百万次,在问之前做一些调查。

:

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

可以使用object。

检查这个片段

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

希望有所帮助

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

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

可以使用解构赋值

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

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