Я пытаюсь решить практическую проблему в JS, и идея ее состоит в том, чтобы использовать некоторые методы и сделать ее максимально эффективной.
Эта проблема:
Мне нужно найти, сколько раз я могу составить слово DOGGY внутри заданной строки заглавных букв.
Например:
Есть ли метод, который я могу использовать для его решения?
Я пытался разобрать строку в массив с помощью оператора распространения [...string], а затем с помощью метода filter() вернуть переменную с отфильтрованными словами, но у меня были проблемы с «G», потому что они должны повторяться.
Вот где я до сих пор:
let result = [...string].filter((char) => {
let word = char !== 'D' && char !== 'O' && char !== 'G' && char !== 'G' && char !== 'Y';
console.info(word);
});
console.info(result);
почти там.. теперь он всегда возвращается 0
Просто у меня это работает странно... теперь он возвращает только 2 даже с этой строкой: 'DXOXGGY'
Да, в этом случае он возвращает 2, но с этой строкой: DXOXGGY он также возвращает 2 и должен быть 1
ой, да, я сделал это неправильно - забыл флаг g :p
Я все еще застрял с этим упражнением. Пробовал с флагом g, но всегда возвращает 0. Вот что я делаю: let result = S.match(/(D.?O.?G.?G.?Y)/g)?.length ?? 0;
это не то, что у меня было



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать фильтр и включает
function findPhrase(input, searchedPhrase) {
const inputWithSearchedPhraseLettersOnly = [...input].filter(letter => searchedPhrase.includes(letter)).join('');
return inputWithSearchedPhraseLettersOnly;
}
(() => {
const input = 'DXOXGGYDXOXGGYXXXDOXXGXXXGYX';
const searchedPhrase = 'DOGGY';
const result = findPhrase(input, searchedPhrase).split(searchedPhrase).length - 1;
console.info(result);
})();Привет, он всегда возвращает 0 для меня.
вы можете использовать этот простой способ
let dog = "DXOXGGYDXOXGGY";
dog = dog.split("X").join('');
const dogs = dog.match(/DOGGY/g).length;
console.info(dogs)Я не поставил этот пример в исходный вопрос, но есть и такие строки: DHTHTOMMGGSDY, и в этом случае это не сработает. Сейчас добавлю, спасибо за ответ
Всего день или два и сотни чашек кофе опоздали. Если вы найдете ошибку, сообщите мне об этом аккуратно, пожалуйста...
const searchString = "DOGGY";
const targetStrings = [
"DHTHTOMMGGSDY",
"DXOXGGYDXOXGGY",
"DXOXGXY"
];
const searchArray = searchString.split("");
console.info("searchString", searchString);
console.info("****************************");
targetStrings.forEach(function (targetString) {
const targetArray = targetString.split("");
console.info("targetString", targetString);
let occurrences = 0;
while (true) {
let allCharsFound = searchArray.every(function (char) {
const index = targetArray.indexOf(char);
if (index === -1) {
return false;
}
targetArray.splice(index, 1);
return true;
});
if (allCharsFound) {
occurrences++;
} else {
break;
}
}
console.info("occurrences", occurrences);
console.info("----------------------------");
});Спасибо @ user3425506, отлично работает! Извините, я только сейчас увидел ваш ответ.
нет, понял
TypeError: Cannot read properties of null (reading 'length')