函数 sumAscii 应该采用一个名称数组,并根据每个字符的小写 ASCII 值的总和计算每个名称的分数。它应该返回得分最高的名称。例如。名字“John”将得到 431 分,因为“j”的 ASCII 代码为 106,“o”的 ASCII 代码为 111,“h”的 ASCII 代码为 104,“n”的 ASCII 代码为 110。
function sumAscii(arrayOfNames) {
function getAsciiScore() {
let sum = 0;
let arrayOfAsciiCodes = [];
for (const name of arrayOfNames) {
name.split("").forEach((letter) => {
sum += letter.toLowerCase().charCodeAt(0);
});
}
return sum;
}
let highestScore = "";
for (const name of arrayOfNames) {
for (const letter of name) {
return getAsciiScore(letter);
}
}
}
我的函数返回所有名称的 Ascii 代码总分
您的代码即将准备就绪。您只需要修复一些逻辑错误:
function sumAscii(arrayOfNames) {
function getAsciiScore(name) {
let sum = 0;
name.split("").forEach((letter) => {
sum += letter.toLowerCase().charCodeAt(0);
});
return sum;
}
let highestScore = -1;
let highestScoreName = null;
for (const name of arrayOfNames) {
let score = getAsciiScore(name);
if (score > highestScore) {
highestScore = score;
highestScoreName = name;
}
}
return highestScoreName;
}
console.log(sumAscii(["John", "Paul", "George", "Ringo"]));
这是一个更简短的方法:
const sumAscii = (arrayOfNames) => {
const getWordScore = (word) => [...word].reduce((acc, cur) => acc + cur.toLowerCase().charCodeAt(0), 0);
return arrayOfNames.sort((a, b) => getWordScore(b) - getWordScore(a))[0];
};
// Test
console.log(sumAscii(["John", "Paul", "George", "Ringo"]));
但这比您的代码效率低,因为它会多次计算每个单词的分数。但这种方式对于小名字的小名单来说是可以的。
这可以通过存储单词及其分数来解决。
const sumAscii = (arrayOfNames) => {
const getWordScore = (word) => [...word].reduce((acc, cur) => acc + cur.toLowerCase().charCodeAt(0), 0);
let combined = arrayOfNames.map(n => {return {name: n, score: getWordScore(n)}});
return combined.sort((a, b) => b.score - a.score)[0].name;
};
// Test
console.log(sumAscii(["John", "Paul", "George", "Ringo"]));