Как найти повторяющиеся слова в строке?

#javascript

Вопрос:

здравствуйте, я хотел бы сохранить повторяющиеся элементы абзаца в массиве, чтобы позже проверить слова, которые являются грубыми, у меня есть функция, с помощью которой я могу преобразовать абзац в массив, но я не знаю, как сохранить повторяющиеся слова в массиве

 function awa(parrafo, palabrasNoPermitidas) {
    let array1 = parrafo.split(" ");

console.log(array1);
}

awa("hello I'm a bunny, if you are a bunny u are bunny too", ["ball"]);
 

Комментарии:

1. Можете ли вы уточнить, что вы хотели бы сохранить? Пожалуйста, покажите пример вывода awa("hello I'm a bunny, if you are a bunny u are bunny too", ["ball"]);

2. Мне нужно сохранить слова, дублированные в данном случае, это банни

3. Итак, результат awa("hello I'm a bunny, if you are a bunny u are bunny too", ["ball"]); был бы ["bunny"] ?

4. конечно, но если есть более повторяющиеся элементы, они должны быть показаны в массиве;

5. Почему бы просто не проверить строку напрямую на наличие таких грубых слов, как parrafo.match(new RegExp("(" palabrasNoPermitidas.join("|") ")", "g")) ?

Ответ №1:

Это приведет к тому, что массив split() будет отфильтрован и будет содержать только дубликаты.

 parrafo.split(" ").filter((e,i,a) => e.trim() amp;amp; a.indexOf(e) !== i);
 

фильтр в основном говорит, что фильтруйте каждый элемент массива и сначала посмотрите, пуст ли он, а затем, совпадает ли его индекс массива с индексом массива первых экземпляров. Если это не то же самое, это дубликат, поэтому верните true

 function awa(parrafo, palabrasNoPermitidas) {
    return parrafo.split(" ").filter((e,i,a) => e.trim() amp;amp; a.indexOf(e) !== i);
}

let repeated = awa("hello    I'm a    bunny, if you are a bunny u are bunny too", ["ball"]);
console.log(repeated) 

Ответ №2:

Давайте сначала рассмотрим несколько сценариев:

Это наилучший вариант развития событий:

 "bunny bunny".split(" ")
//=> ["bunny", "bunny"]
 

Однако, если есть внутренние, начальные и/или конечные пробелы, нам необходимо исключить пустые строки как дубликаты:

 "    bunny     bunny    ".split(" ")
//=> ["", "", "", "", "bunny", "", "", "", "", "bunny", "", "", "", ""]
 

Большинство людей использовали бы знаки препинания. В этом случае все становится еще сложнее. Как вы можете видеть, здесь нет дубликатов:

 "bunny, bunny and bunny!".split(" ")
//=> ["bunny,", "bunny", "and", "bunny!"]
 

Так что вам, вероятно, следует разделиться по «границе слов».:

 "bunny, bunny and bunny!".split(/b/)
//=> ["bunny", ", ", "bunny", " ", "and", " ", "bunny", "!"]
 

Который по-прежнему будет работать с внутренними, начальными и/или конечными пробелами:

 "     bunny,     bunny     and    bunny!   ".split(/b/)
//=> ["     ", "bunny", ",     ", "bunny", "     ", "and", "    ", "bunny", "!   "]
 

Имея это в виду:

 "hello I'm a bunny, if you are a bunny u are bunny too".split(/b/).filter((x,i,xs) => (/^[a-z] $/i).test(x) amp;amp; xs.indexOf(x) != i)
//=> ["a", "bunny", "are", "bunny"]