Сравнение двух массивов объектов и слияние - PullRequest
0 голосов
/ 01 сентября 2018

вот мой пример использования: У меня есть два массива объектов из двух наблюдаемых, и я создал метод combLatest для итерации массива в один с сопоставленными идентификаторами:

var result1 = [{
    question: 1,
    answerList: [{
        answer: 'Sandra',
        isDefault: 'true'
      },
      {
        answer: 'John',
        isDefault: 'false'
      }
    ]
  },
  {
    question: 2,
    answerList: [{
        answer: 'Peter',
        isDefault: 'false'
      },
      {
        answer: 'Bobby',
        isDefault: 'false'
      }
    ]
  },
  {
    question: 3,
    answerList: [{
        answer: 'Harry',
        isDefault: 'false'
      },
      {
        answer: 'Bob',
        isDefault: 'false'
      }
    ]
  }
]

var result2 = [{
    question: 1,
    answer: 'John'
  },
  {
    question: 3,
    answer: 'Bob'
  }
];

Моя цель - создать еще один массив объектов, содержащих такие элементы:

var finalResult = [{
    question: 1,
    answerList: [{
        answer: 'Sandra',
        isDefault: 'false'
      },
      {
        answer: 'John',
        isDefault: 'true'
      }
    ]
  },
  {
    question: 2,
    answerList: [{
        answer: 'Peter',
        isDefault: 'false'
      },
      {
        answer: 'Bobby',
        isDefault: 'false'
      }
    ]
  },
  {
    question: 3,
    answerList: [{
        answer: 'Harry',
        isDefault: 'false'
      },
      {
        answer: 'Bob',
        isDefault: 'true'
      }
    ]
  }
]

Ответы [ 2 ]

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

Пример кода:

let result = result1.map(item => {
    let targetItems = result2.filter( item2 => item2.question === 
                      item.question );
    targetItems.forEach(item3 => {
        item.answerList.push(item3.answer);
    });

    return item;
});

console.log(result);
0 голосов
/ 01 сентября 2018

Вы можете использовать хеш-таблицу для более быстрой проверки вопроса с заданным ответом. Затем выполните итерацию и обновите элементы в соответствии с настройками объекта.

var result1 = [{ question: 1, answerList: [{ answer: 'Sandra', isDefault: 'true' }, { answer: 'John', isDefault: 'false' }] }, { question: 2, answerList: [{ answer: 'Peter', isDefault: 'false' }, { answer: 'Bobby', isDefault: 'false' }] }, { question: 3, answerList: [{ answer: 'Harry', isDefault: 'false' }, { answer: 'Bob', isDefault: 'false' }] }],
    result2 = [{ question: 1, answer: 'John' }, { question: 3, answer: 'Bob' }],
    object = result2.reduce((o, { question, answer }) => {
        (o[question] = o[question] || {})[answer] = true;
        return o;
    }, Object.create(null));

result1.forEach(({ question, answerList }) =>
    answerList.forEach(o => 
        o.isDefault = (question in object && o.answer in object[question]).toString()
    )
);

console.log(result1);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...