javascript - 无法访问对象属性的值
问题描述
我正在循环一个对象以检索一些属性,但由于某种原因,我无法访问嵌套对象属性的值。
这是我的循环功能:
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
取回属性。number
更新
仔细观察,这个包含 800 多个大型对象的数组,其中一些phoneNumbers
数组的长度是0
不存在的。这导致整个功能失败。感谢以下评论。
我的解决方案是添加到 if 语句:
if (key === 'phoneNumbers' && contact[key].length)
解决方案
您可以像这样防止空的 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>
推荐阅读
- precision - 物体检测中的mAP是什么?
- javascript - JavaScript Proxy Setter 不进行第二次代理调用
- arrays - 来自 MultiArray 的 Laravel 嵌套数组
- python - 如何在数据框中使用按元素分组的索引?
- scala - 如何使用 Spark 和 Scala/PySpark 从 Amazon QLDB 读取数据?
- reactjs - 在一个类组件中使用 React Context API 的多个上下文
- c - 将 funopen 重定向到标准输入/标准输出的便携式方法
- itext - Itext 7.1.6 合并文档时出现内存不足错误
- java - 将两张不同类型的地图合并为一张地图
- node.js - KeystoneJS:keystone.list 不是函数