我有一个庞大的单词列表,这些单词是我从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())
答案 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());