簡體   English   中英

如何使用for in循環遍歷嵌套對象並返回串聯的每個屬性字符串?

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

例如,我想將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.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); 

希望能幫助到你

您可以為所需的屬性名稱使用一個數組(這將保持順序),然​​后映射值並將其連接到以空格分隔的字符串。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM