Как выстроить карту вместо вложенных циклов - PullRequest
1 голос
/ 21 апреля 2019

Для моего сценария мне нужно поместить элементы в массив адресов, который содержит объекты. Я работаю с vue.js.

Моя текущая рабочая функция:

propagateCustomerInfo(selectedOption, id){

        // Propagate addresses
        this.addresses = selectedOption.addresses

        // Propagate contact's addresses
        for (var i = selectedOption.contacts.length - 1; i >= 0; i--) {
            for (var j = selectedOption.contacts[i].addresses.length - 1; j >= 0; j--) {
                let address = selectedOption.contacts[i].addresses[j]
                address.contact = selectedOption.contacts[i]
                this.addresses.push(address)
            }
        }
    },

объект selectedOption имеет следующую структуру:

{
   addresses: [
      {
         id: 0,
         street: 'My street'
      },
      {...}
   ],
   contacts: [
      {
         id: 0,
         name: 'Lorem Ipsum',
         addresses: [
            {
               id: 0,
               street: 'My street'
            },
            {...}
         ],
      }
   ]
}

Помимо помещения объекта адреса каждого контакта в массив this.addresses, мне нужно добавить контакт к самому адресу для целей многоэлементного рендеринга. Вот почему я делаю address.contact = selectedOption.contacts[i]

Я почти уверен, что это может быть выполнено самым красивым способом с помощью некоторой комбинации картирования / уменьшения, но я не могу понять, как это сделать.

Любая помощь будет по достоинству оценена. Спасибо!

1 Ответ

1 голос
/ 21 апреля 2019

, если вы хотите объединить все адреса в переменной контакта с переменной адреса:

    this.contacts.map(contact => this.addresses.push(...contact.addresses))

Редактировать .
, чтобы ввести contact.id и contact.name:*1007.*

this.contacts.map(contact => {
  let temp = []
    contact.addresses.map(address => {
    temp.push({
      name: contact.name,
      id: contact.id,
      ...address
    })
  })
  this.addresses.push(...temp)
})
...