对于每个,过滤时都不适用于对象数组



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将满足undefineds。

我认为您可能想返回电话号码(每个条目的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));
}

可能要使用reducemap

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)),[]);

相关内容

  • 没有找到相关文章

最新更新