i m试图从所有联系人列表中获取所有数字。我可能没有正确使用任何建议吗?我已经放了一个预期的样本
//sample of a contact
Object {
"company": "Financial Services Inc.",
"contactType": "person",
"firstName": "Hank",
"id": "2E73EE73-C03F-4D5F-B1E8-44E85A70F170",
"imageAvailable": false,
"jobTitle": "Portfolio Manager",
"lastName": "Zakroff",
"middleName": "M.",
"name": "Hank M. Zakroff",
"phoneNumbers": Array [
Object {
"countryCode": "us",
"digits": "5557664823",
"id": "337A78CC-C90A-46AF-8D4B-6CC43251AD1A",
"label": "work",
"number": "(555) 766-4823",
},
Object {
"countryCode": "us",
"digits": "7075551854",
"id": "E998F7A3-CC3C-4CF1-BC21-A53682BC7C7A",
"label": "other",
"number": "(707) 555-1854",
},
],
},
//Expected
numbers = [
5557664823,
7075551854
]
//does not work
const numbers = contacts.map(contact => contact.phoneNumbers.forEach(number));
forEach
总是返回 undefined
,因此您的map
回调返回undefined
,因此numbers
将满足undefined
s。
我认为您可能想返回电话号码(每个条目的phoneNumbers
数组中的每个number
),然后可能会使结果弄平:
const numbers = contacts.map(contact => contact.phoneNumbers.map(({number}) => number)).flat();
Array.prototype.flat
是相对较新的,但很容易填充。
这是一种常见的模式,有一种flatMap
方法可以一次进行:
const numbers = contacts.flatMap(contact => contact.phoneNumbers.map(({number}) => number));
或仅使用push
的简单循环:
const numbers = [];
for (const {phoneNumbers} of contacts) {
numbesr.push(...phoneNumbers.map(({number}) => number));
}
可能要使用reduce
和map
let numbers = contacts.reduce((p, c, i) => {
return p.concat(c.phoneNumbers.map(pn => pn.number));
}, []);
我不知道我做了多少次。foreach不会返回任何东西。
const numbers = contacts.reduce((n, c)=>(a.concat(contact.phoneNumbers)),[]);
或
const numbers = contacts.reduce((n, c)=>(a.concat(contact.phoneNumbers.map(pn=>pn.number)),[]);