例如,我想打印第一個,中間和最後作爲連接字符串的屬性值。如何循環嵌套對象,使用for in循環並返回每個屬性字符串連接?
最終輸出的存在:「約翰·P·多伊」
var person = {
name: {
first: 'John',
middle: 'P',
last: 'Doe'
},
age: 35,
homeTown: 'Nashville, TN'
};
例如,我想打印第一個,中間和最後作爲連接字符串的屬性值。如何循環嵌套對象,使用for in循環並返回每個屬性字符串連接?
最終輸出的存在:「約翰·P·多伊」
var person = {
name: {
first: 'John',
middle: 'P',
last: 'Doe'
},
age: 35,
homeTown: 'Nashville, TN'
};
這些類型的問題已經發布了數百萬次,請求之前做一些研究。
反正:
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]);
}
});
}
謝謝Sesh!在我意識到這是多麼簡單之前,我一直在思考這個解決方案。我絕對會研究它。 – trenov
爲什麼你認爲你需要一個循環?只需連接3個屬性。 – Barmar
只會有一個人嗎?你已經提到了一個循環,但你的例子並不完全需要使用它。 – Santi
相關:[訪問/進程(嵌套)對象,數組或JSON](http://stackoverflow.com/q/11922383/218196) –