Пытаюсь написать функциональное решение этой проблемы. У меня уже есть решение, которое использует al oop и мутацию без рекурсии (я знаю, что то, что я попытался ниже, связано с мутацией, и я пытаюсь избежать этого).
Пожалуйста, смотрите ожидаемый результат в комментариях ниже . Я должен подчеркнуть, что элементы не обязательно уникальны, и сортировка не имеет значения.
const getNamesWhichFillHoles = (namesArrayWithHoles, namesArrayFilled, fillers = []) => {
const holey = [...namesArrayWithHoles].filter(Boolean);
const filled = [...namesArrayFilled].filter(Boolean);
const fillerIndexInFilled = filled.findIndex(name => !holey.includes(name));
if (fillerIndexInFilled === -1) return fillers;
const filler = filled[fillerIndexInFilled];
const fillerIndexInHoley = holey.findIndex(name => name == filler);
fillers.push(filler);
filled[fillerIndexInFilled] = null;
holey[fillerIndexInHoley] = null;
return getNamesWhichFillHoles(holey, filled, fillers);
}
const namesArrayWithHoles = ['Bob', null, null, 'Sue', null];
const namesArrayFilled = ['Jim', 'Bob', 'Bob', 'Sam', 'Sue',];
const fillerNames = getNamesWhichFillHoles(namesArrayWithHoles, namesArrayFilled);
console.log(fillerNames); // [ 'Jim', 'Sam' ]
// should be: [ 'Jim', 'Sam', 'Bob' ]