函数 sumAscii 应该采用一个名称数组,并根据每个字符的小写 ASCII 值的总和计算每个名称的分数

问题描述 投票:0回答:1

函数 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 代码总分

javascript function
1个回答
0
投票

您的代码即将准备就绪。您只需要修复一些逻辑错误:

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"]));

© www.soinside.com 2019 - 2024. All rights reserved.