JS / Vue: слияние двух массивов, если одно поле является общим


JS / Vue: слияние двух массивов, если одно поле является общим

27.10.2020 09:22:41 Просмотров 8 Источник

Кажется, я не могу найти правильный способ объединить два массива в один, "группируя" их по общему полю "id"...

Ниже приведена моя последняя попытка:

// editedItem.extra_tools ///

0:
{
    extra_tool_password: "vpn pwd"
    extra_tool_username: "vpn us"
    id_extra_tool: "8"
},
1:
{
    extra_tool_password: ""
    extra_tool_username: "off"
    id_extra_tool: "1"
},
2:
{
    extra_tool_password: ""
    extra_tool_username: "HS"
    id_extra_tool: "7"
}

должно быть объединено, через id_extra_tool к:

// this.extras //
0:
{
extra_params: 1
extra_tool_name: "Hubspot"
extra_tool_password: "password_new"
extra_tool_username: null
id_extra_tool: (1)
}
1:
{
extra_params: 1
extra_tool_name: "Office"
extra_tool_password: "12345"
extra_tool_username: "user_office"
id_extra_tool: (7)
}
{
2:
extra_params: 0
extra_tool_name: (...)
extra_tool_password: (...)
extra_tool_username: (...)
id_extra_tool: (8)
        this.extrasEdited = []
        for (i = this.extras.length - 1; i >= 0; i--) {
          this.extrasEdited.push({
            id_extra_tool: this.editedItem.extra_tools[i].id_extra_tool,
            extra_tool_username: this.editedItem.extra_tools[i].extra_tool_username,
            extra_tool_password: this.editedItem.extra_tools[i].extra_tool_password
          })
          this.editedItem.extra_tools.forEach((element, index) => {
            console.log(element.id_extra_tool, this.extrasEdited[index].id_extra_tool)
            if (element.id_extra_tool === this.extrasEdited[index].id_extra_tool) {
              this.extrasEdited.push({
                extra_params: element.extra_params,
                extra_tool_name: element.extra_tool_name
              })
            }
          })
        }

Я хотел бы иметь:

// this.extras //
0:
{
extra_params: 1
extra_tool_name: "Hubspot"
extra_tool_password: "password_new"
extra_tool_username: null
id_extra_tool: 1
}
1:
{
extra_params: 1
extra_tool_name: "Office"
extra_tool_password: "12345"
extra_tool_username: "user_office"
id_extra_tool: 7
}
{
2:
extra_tool_password: "VPN"
extra_tool_username: "HS"
id_extra_tool: "8"
extra_tool_password: "user_VON_pswwww"
extra_tool_username: "user_VPN"

теперь все должно быть яснее...

ты!

У вопроса есть решение - Посмотреть?

Ответы - JS / Vue: слияние двух массивов, если одно поле является общим / JS / Vue: merge two arrays if one field is in common

Является ответом!
Mirco Cattabriga

27.10.2020 11:55:58

Вы могли бы попробовать:

var mergedArray =[]
 extra_tools.map(x => {
      extras.map(y => {
        if (x.id_extra_tool === y.id_extra_tool) {
          mergedArray.push(Object.assign(x, y));
        }
      })
    })
Помочь в развитии проекта:
Закрыть X