Как отсортировать массив строк по чаcтоте присутствия каждого слова в JavaScript?
В данной статье мы рассмотрим с Вами как можно отсортировать массив строк в JavaScript в убывающем порядке в зависимости от частоты присутствия каждого слова в исходном списке.
Итак, вот задача: есть список повторяющихся строк. Необходимы подсчитать количество появлений каждого слова, а затем отсортировать полученный список по частоте присутствия каждого слова в порядке убывания.
Вот пример:
// исходный массив
let fruits = ['banana', 'fruit', 'apple', 'apple', 'orange', 'banana', 'orange', 'banana', 'banana', 'apple'];
// должны получить,
// так как слово 'banana' встречается в исходном списке 4 раза, 'apple' - 3 раза и т.д.
['banana', 'apple', 'orange', 'fruit']
Скрипт, который решает данную задачу:
/**
* Сортировка элементов массива по частоте их присутствия
*
* @param {Array<string>} array
*
* @returns {Array<string>}
*/
function sortByCount(array)
{
if( !Array.isArray(array) )
throw new TypeError('Неправильный тип, ожидался массив, получен ' + typeof array);
// карта для подсчета того, сколько раз встречаются строка в массиве
let valuesMap = new Map();
// проходимся по каждому элементу массива...
array.forEach(elem => {
// ... и помещаем значение в карту, увеличивая, при необходимости, значение счетчика
valuesMap.set(elem, valuesMap.has(elem) ? valuesMap.get(elem) + 1 : 1);
});
// сортируем полученный массив объектов "{'строка', число}" в порядке убывания частоты присутствия в исходном массиве
let arr = [...valuesMap.entries()].sort((a, b) => b[1] - a[1]);
// возвращаем массив, состоящий только из первых элементов
return arr.map(value => value[0]);
}
Пример использования:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JS - Сортировка дупликатов</title>
</head>
<body>
<script src="sort_duplicated.js"></script>
<script>
let fruits = ['banana', 'fruit', 'apple', 'apple', 'orange', 'banana', 'orange', 'banana', 'banana', 'apple'];
let sortedFruits = sortByCount(fruits);
console.log(fruits);
console.log(sortedFruits);
</script>
</body>
</html>
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.