КАРТА против СНИЖЕНИЯ, который я должен выбрать? - PullRequest
0 голосов
/ 01 ноября 2018

В этом случае мне нужно отформатировать список адресов электронной почты в JSON, и обе функции map и reduce выполняют свою работу, но я запутался, какую из них использовать, или есть какие-нибудь альтернативы?

Input

const emailList = `
Last name, First name <email@email.com>;
Last name, First name <email@email.com>;
Last name, First name <email@email.com>;
Last name, First name <email@email.com>;
`

Использование карты

let formatedList =
  emailList.trim()
  .split(';')
  .map(record => {
    let recordObj = {}
    const [lastname, firstname, email] = record.split(/\,|\</g).map(r => r.trim())

    recordObj['firstname'] = firstname
    recordObj['lastname'] = lastname
    recordObj['email'] = email

    return recordObj
  })

Использование Reduce

let formatedList =
  emailList.trim()
  .split(';')
  .reduce((usersObj, record) => {
    let formatedUser = {}
    let [lastname, firstname, email] = record.split(/\,|\</g).map(r => r.trim())

    formatedUser['firstname'] = firstname
    formatedUser['lastname'] = lastname
    formatedUser['email'] = email

    usersObj.push(formatedUser)
    return usersObj;
  }, [])

выход

[
  {
    "firstname": "First name",
    "lastname": "Last name",
    "email": "email@email.com>"
  },
  {
    "firstname": "First name",
    "lastname": "Last name",
    "email": "email@email.com>"
  },
  ...
]

1 Ответ

0 голосов
/ 01 ноября 2018

Некоторые мысли:

1) Если вы .map массив, который сообщает компилятору (и вашим коллегам), что каждый элемент массива должен быть преобразован во что-то еще, и результаты затем собираются в новый массив.

2) Если вы .reduce массив, который сообщает компилятору (и вашим коллегам), что все элементы массива преобразуются в новое значение (да, это может быть массив).

3) Вы можете переписать каждый .map с помощью .reduce, но вы не можете написать .reduce с помощью .map (по крайней мере, не очень красиво).

Поэтому я бы сказал, что .map выражает ваше намерение более четко. Это все равно, что отдавать предпочтение «я покупаю автомобиль», а не «я покупаю автомобиль, который движется и имеет четыре колеса и двигатель». Хотя оба означают одно и то же, первое легче понять.

...