функция частоты слова, как вернуть, если есть более 1 наиболее часто используемых слов? - PullRequest
0 голосов
/ 31 марта 2020

Ниже моя текущая функция wordFrequency.

Я бы хотел, чтобы

  1. отфильтровывали "the", "a", "an", "и" из string.
  2. если существует более одного «наиболее часто», покажите все из них.

Но вам трудно понять, как это сделать. Любая помощь?

export default function wordFrequency(textData) {
    const splitTextArr = textData.toLowerCase().split(" ")
    //const filterTextArr = splitTextArr.filter(word => {
    //    if (word !== "the" && "a" && "an" && "and" && "or") {

    //    }
    //})

    splitTextArr.reduce()

    let counts = {}
    let compare = 0
    let mostFrequent

    for (var i = 0, len = splitTextArr.length; i < len; i++) {
        var word = splitTextArr[i]

        if (counts[word] === undefined) {
            counts[word] = 1
        } else {
            counts[word] = counts[word] + 1
        }
        if (counts[word] > compare) {
            compare = counts[word]
            mostFrequent = splitTextArr[i]
        }
    }
    console.log("most used word", mostFrequent)
    return mostFrequent
}

1 Ответ

2 голосов
/ 31 марта 2020

Вы действительно очень близки. Я думаю, что если вы хотите иметь возможность возвращать более одного часто используемого слова, вам нужно обновить mostFrequent, чтобы оно было array, а не просто string, например:

const mostFrequent = [];

Обновите этот последний if блок следующим образом:

if (counts[word] > compare) {
  compare = counts[word];
  mostFrequent = [word];
}
if (counts[word] === compare) {
  mostFrequent.push(word);
}

Тогда, если вы удовлетворены возвратом mostFrequent в качестве массива во всех случаях, все готово. Если вы хотите вернуть массив только в том случае, если в ie, что-то вроде следующего внизу должно работать:

if (mostFrequent.length > 0) {
  return mostFrequent;
}
return mostFrequent[0];

Теперь для фильтрации этих слов. Вы близки с функцией фильтрации, которая закомментирована. Я бы изменил следующее:

const bannedWords = ['the', 'a', 'an', 'and', 'or'];
const filterTextArr = splitTextArr.filter(word => {
  return !bannedWords.includes(word);
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...