[英]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.