我正在遍历一个对象以检索某些属性,但是由于某些原因,我无法访问嵌套对象属性的值。
这是我的循环功能:
parseContacts = (contacts) => {
return contacts.map(contact => {
let parsedContact = {};
Object.keys(contact).forEach(key => {
if (key === 'givenName') {
parsedContact.firstName = contact[key];
} if (key === 'familyName') {
parsedContact.surname = contact[key];
} if (key === 'phoneNumbers') {
parsedContact.phoneNumber = contact[key][0].number;
}
})
return parsedContact;
})
}
firstName
和surname
可以正常工作,但是在最后一个if语句中,我得到undefined
。关键字为phoneNumbers
的属性是一个对象数组,这是数组中的项目0
:
{id: "302", label: "mobile", number: "+44 7X7X 50XX72"}
当我改用此代码时:
} if (key === 'phoneNumbers') {
parsedContact.phoneNumber = contact[key][0];
}
最后没有.number
的情况下,我使整个对象恢复正常,只是无法从对象中恢复<{>} {>属性。
经过仔细检查,其中包含800多个大对象的数组,number
数组的某些长度为phoneNumbers
,因此该属性不存在。这导致整个功能失败。感谢您的以下评论。
我的解决方案是在if语句中添加
0
答案 0 :(得分:0)
您可以防止出现空白的phoneNumbers数组问题:
contact[key] && contact[key].length ? contact[key][0].number : ''
const parseContacts = contacts => {
return contacts.map(contact => {
let parsedContact = {}
Object.keys(contact).forEach(key => {
switch (key) {
case 'givenName':
parsedContact.firstName = contact[key]
break
case 'familyName':
parsedContact.surname = contact[key]
break
case 'phoneNumbers':
parsedContact.phoneNumber = contact[key] && contact[key].length ? contact[key][0].number : ''
}
})
return parsedContact
})
}
const contacts = []
for (let i = 0; i < 10; i++) {
contacts.push({
givenName: faker.name.firstName(),
familyName: faker.name.lastName(),
phoneNumbers: [
{
id: faker.random.uuid(),
label: 'mobile',
number: faker.phone.phoneNumber()
}, {
id: faker.random.uuid(),
label: 'mobile',
number: faker.phone.phoneNumber()
}
]
})
}
contacts.push({
givenName: faker.name.firstName(),
familyName: faker.name.lastName(),
phoneNumbers: []
})
contacts.push({
givenName: faker.name.firstName(),
familyName: faker.name.lastName(),
phoneNumbers: null
})
console.log('RESULT ' + JSON.stringify(parseContacts(contacts)))
<script src="https://rawgit.com/Marak/faker.js/master/examples/browser/js/faker.js"></script>