У меня есть массив с тремя уровнями вложенности и одномерный объект. Мне нужно сравнить два, чтобы найти совпадающие идентификаторы и вставить их в новый массив в виде пар. Я просто использую метод карты здесь, но, возможно, есть более эффективный способ сделать это? Я думал об использовании метода фильтра, но я не думаю, что он может работать в этом случае.
ФУНКЦИЯ:
const getMatchingIDs = function (pages, storedOBJ) {
const arr = []
pages.map((page)=> {
return page.questions.map((q)=>{
const questionText = q.questionText
return Object.keys(storedOBJ).map((key) => {
const answerIndex = storedOBJ[key]
if (typeof answerIndex !== 'undefined' && questionText === key) {
const answerID = q.answers[answerIndex].id
arr.push( q.id + ':' + answerID)
}
})
})
})
return arr
}
Массив и объект:
const pages = [
{
questions: [
{
id: 987,
questionText: 'Some Question',
answers: [
{
id: 154
},
{
id: 232
},
{
id: 312
}
]
},
{
id: 324,
questionText: 'Another Question',
answers: [
{
id: 154
},
{
id: 232
},
{
id: 312
}
]
},
{
id: 467,
questionText: 'Last Question',
answers: [
{
id: 154
},
{
id: 232
},
{
id: 312
}
]
}
]
}
]
const storedOBJ = {
'Some Question': 0,
'Last Question': 0,
'Another Question': 2
}
Запуск getMatchingIDs(pages, storedOBJ)
должен вернуть ["987:154", "324:312", "467:154"]