Как сделать слияние различных объектов с другими - PullRequest
0 голосов
/ 19 июня 2019

Я хочу получить массив объектов, в котором каждый «родительский» объект содержит несколько «дочерних» объектов в зависимости от свойства «idCompany».

Это код, который я создал, но он генерирует меня

Мой код

mergeProvider(){
       let mergeProviders = []
      for(let i = 0; i < this.companies.length; i++){
        for(let j = 0; j < this.provides.length; j++){
        if(this.companies[i].idCompany === this.provides[j].idCompany){
          mergeProviders.push({
            companyName: this.companies[i].companyName,
            idCompany: this.companies[i].idCompany,
            providers:{
                idProvider: this.provides[j].id,
                fullName: this.provides[j].label
            }
          })
        }
        }
      }
    },

Сгенерируйте это

0: {companyName: "CHCC", idCompany: 1514, provides: {…}}
1: {companyName: "CHCC", idCompany: 1514, provides: {…}}
2: {companyName: "CHCC", idCompany: 1514, provides: {…}}
3: {companyName: "CHCC", idCompany: 1514, provides: {…}}
.
.
.
n...

Для каждого:

n: {companyName: "CHCC", idCompany: 1514, provides:{fullName: "name", idProvider: "1111"}

Я ожидал, что результат будет следующим:

n: {
 companyName: "CHCC",
 idCompany: 1514,
 provides:[
  {fullName: "name", idProvider: "1111"},
  {fullName: "name2", idProvider: "2222"},
  {fullName: "name3", idProvider: "3333"},
  {fullName: "name4", idProvider: "4444"},
  {...}
]

1 Ответ

0 голосов
/ 19 июня 2019
function mergeProvider() {
  const _companies = {};

  this.companies.forEach(company => {
    this.providers.forEach(provider => {
      if (company.idCompany === provider.idCompany) {
        const { companyName, idCompany } = company;
        const { fullName, idProvider } = provider;

        _companies[idCompany] = _companies[idCompany] || { companyName, idCompany, providers: [] };

        // check for duplicate providers
        if ( !_companies[idCompany].provider.map(p => p.idP).includes(idProvider) ) {
          _companies[idCompany].providers.push({fullName, idProvider})
        }
      }
    })
  });

  return Object.values(_companies);
}

, если оба companies и providers являются массивом, это должно работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...