遍历单词数组并返回新的数字数组

时间:2019-10-14 02:45:16

标签: javascript arrays object filter

我有一个庞大的单词列表,这些单词是我从words.txt文件中解析出来的,并过滤掉了数字,标点符号以及所有带有大写字母的单词。然后,我需要遍历该数组,获取每个单词并从letterScores对象返回值。作为输出,我总是得到NaN,因为我是JS的新手,所以我不知道如何使它工作。

我也尝试使用map()方法,而不是将值推入一个空数组,但是得到了相同的Not a Number输出。我相信应该有一种更容易的方法来达到我不知道的相同结果。

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 :(得分:0)

我不确定您是否必须按行拆分它。如果需要的话,我将其保留在其中,但是当您按行拆分它时,它会创建第三个嵌套数组,然后按单词拆分它,但是随后需要将单词拆分为多个字符以进行比较。我将其设置为双嵌套循环,但如果绝对必要,则保留第三个循环。

希望有帮助

        //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());