Пройтись по массивам и вывести в один массив результат...(обработка результата теста)

Доброе утро. Помогите пожалуйста решить задачку. Есть опрос, после его прохождения в массив answers попадают его результаты:

const answers = ["1a", "2a", "3b", "4a", "5b", "6a", "7b", "8a", "9b", "10a", "11b", "12a", "13a", "14b", "15a", "16b", "17a", "18b", "19a", "20b"];

Необходимо пройти по 5 массивам в котором ответы к этому опросу:

const arr1 = ["1a", "3b", "6a", "10a", "11a", "13b", "16a", "20a"];
const arr2 = ["1b", "4a", "7b", "9a", "11b", "14a", "17b", "19a"];
const arr3 = ["2b", "5a", "9b", "10b", "12b","15a", "19b", "20b"];
const arr4 = ["3a", "5b", "7a", "8b", "13a", "15b", "17a", "18b"];
const arr5 = ["2a", "4b", "6b", "8a", "12a", "14b", "16b", "18a"];

И вывести один массив если значения в массиве answers совпадают со значениями ответов к опросу:

const result = [
    { id: 1, count: 4 },
    { id: 2, count: 4 },
    { id: 3, count: 3 },
    { id: 4, count: 4 },
    { id: 5, count: 5 },
  ];

т.е. если первый элемент массива answers (1b), есть в одном из массивов, в данном случае arr2, то увеличивает счётчик count в массиве result где id: 2 на + 1 и тд...


Ответы (1 шт):

Автор решения: Stepan Kasyanenko

Вот один из способов.

const answers = ["1a", "2a", "3b", "4a", "5b", "6a", "7b", "8a", "9b", "10a", "11b", "12a", "13a", "14b", "15a", "16b", "17a", "18b", "19a", "20b"];

const checks = [{
  id: 1,
  answers: ["1a", "3b", "6a", "10a", "11a", "13b", "16a", "20a"]
}, {
  id: 2,
  answers: ["1b", "4a", "7b", "9a", "11b", "14a", "17b", "19a"]
}, {
  id: 3,
  answers: ["2b", "5a", "9b", "10b", "12b", "15a", "19b", "20b"]
}, {
  id: 4,
  answers: ["3a", "5b", "7a", "8b", "13a", "15b", "17a", "18b"]
}, {
  id: 5,
  answers: ["2a", "4b", "6b", "8a", "12a", "14b", "16b", "18a"]
}];

const result = checks.map(m => ({
  id: m.id,
  count: m.answers.filter(f => answers.indexOf(f) !== -1).length
}));

console.log(result);

→ Ссылка