Требуется удалить слово из списка, и оставить только те элементы, которые не входят в это слово (["с", "ц", "с", "п", "р", "е", "о"], "слово"))
const removeLetters = (letters, word) => {
const result = [];
const newObj = letters.reduce((result, current) => ({ ...result, [current]: (result[current] || 0) + 1 }), {});
const wordArr = [...word];
for (let letter of wordArr) {
if (!newObj[letter]) {
result.push(letter);
}
}
return result;
};
Пример:
console.log(removeLetters(["с", "ц", "с", "п", "р", "е", "о"], "слово"))
Результат:
[ "ц", "с", "п", "р", "е"]
Ответы (1 шт):
Автор решения: Grundy
→ Ссылка
В коде в вопросе перепутан порядок, какие символы откуда должны удалиться.
Также не хватает изменения количества в словаре, чтобы знать нужно ли удалять символ или нет
const removeLetters = (letters, word) => {
const result = [];
const wordArr = [...word];
const newObj = wordArr.reduce((result, current) => ({ ...result,
[current]: (result[current] || 0) + 1
}), {}); // подсчитываются символы в слове
for (let letter of letters) {
if (!newObj[letter]) {
result.push(letter);
} else {
newObj[letter] -= 1; // удаляется повторение символа
}
}
return result;
};
console.log(removeLetters(["с", "ц", "с", "п", "р", "е", "о"], "слово")) // [ "ц", "с", "п", "р", "е"]