Проходя через массив слов и возвращая новый массив чисел - PullRequest
0 голосов
/ 14 октября 2019

У меня есть огромный список слов, которые я проанализировал из файла words.txt и отфильтровал числа, знаки пунктуации и все слова, которые имеют заглавные буквы. Затем мне нужно пройти через этот массив, взять каждое слово и вернуть значения из объекта letterScores. В качестве вывода я всегда получаю NaN, и, поскольку я новичок в JS, я понятия не имею, как заставить его работать.

Я также пытался использовать метод map () вместо того, чтобы помещать значения в пустой массив, но получилТо же, не выходной номер. Я считаю, что должен быть более простой способ достичь того же результата, о котором я не знаю.

var text = fs.readFileSync("./words.txt").toString('utf-8');
var textByLine = text.split("\n")
//--------------------------------------------------------//

const task1 = () =>{

    letterScores = {
        a:1, e:1, i:1, o:1, u:1, l:1, n:1, s:1, t:1, r:1,
        d:2, g:2,
        b:3, c:3, m:3, p:3,
        f:4, h:4, v:4, w:4, y:4,
        k:5,
        j:8, x:8,
        q:10, z:10
    }
    let wordScores = []
    let filtered = textByLine.filter((word) => !/\W|\d|[A-Z]/.test(word))
    filtered.forEach((word) =>{
        const newWord = [...word]
        sum = 0
        for (let letters in newWord){
            sum += letterScores[letters]
        }
        wordScores.push(sum)
    })
    return wordScores
}
console.log(task1())

1 Ответ

0 голосов
/ 14 октября 2019

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

Надеюсь, это поможет

        //var text = fs.readFileSync("./words.txt").toString('utf-8');
        var text = 'The man ran quickly.\nI do not know why, but he did.';
        //var textByLine = text.split("\n");

        const task1 = () => {

            letterScores = {
                a: 1, e: 1, i: 1, o: 1, u: 1, l: 1, n: 1, s: 1, t: 1, r: 1,
                d: 2, g: 2,
                b: 3, c: 3, m: 3, p: 3,
                f: 4, h: 4, v: 4, w: 4, y: 4,
                k: 5,
                j: 8, x: 8,
                q: 10, z: 10
            };

            let wordScores = [];

            //textByLine.forEach(function (words) {
            let filtered = text.replace(/[^a-zA-Z0-9 !?]+/g, "");
            words = filtered.toLowerCase();
            var newLine = words.split(" ");
            newLine.forEach(function (word) {
                const newWord = word.split("");
                sum = 0;
                for (var i = 0; i < newWord.length; i++) {
                    sum += letterScores[newWord[i]];
                }
                wordScores.push(sum);
            });

            //});
            return wordScores;
        };
        console.log(task1());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...