2016-11-14 62 views
1

例如,我想打印第一個,中間和最後作爲連接字符串的屬性值。如何循環嵌套對象,使用for in循環並返回每個屬性字符串連接?

最終輸出的存在:「約翰·P·多伊」

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

爲什麼你認爲你需要一個循環?只需連接3個屬性。 – Barmar

+0

只會有一個人嗎?你已經提到了一個循環,但你的例子並不完全需要使用它。 – Santi

+0

相關:[訪問/進程(嵌套)對象,數組或JSON](http://stackoverflow.com/q/11922383/218196) –

回答

2

你並不需要一個循環,正好連接的屬性。

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

使用for-in循環將是一個壞主意,因爲對象不保證它們的順序。所以你最終可以用Doe John P.代替。

+0

謝謝Barmar!編程很新。沒意識到我可以連接它們。這非常有用! – trenov

+0

您應該通過點擊旁邊的複選標記來接受解決問題的答案。 – Barmar

0

這些類型的問題已經發布了數百萬次,請求之前做一些研究。

反正:

alert(person.name.first + ' ' + person.name.middle + ' ' + person.name.last); 
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);

希望它可以幫助

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

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

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

謝謝Sesh!在我意識到這是多麼簡單之前,我一直在思考這個解決方案。我絕對會研究它。 – trenov