javascript - 使用 CharCodeAt 与索引而不是句子

标签 javascript ecmascript-6

这个问题以前曾通过不同的方式提出过,但与这个不同。我想通过使用 ES5 或 ES6 编写一个函数来实现,该函数使用系统 A = 1、B = 2、C = 3 等计算得分最高的单词。 该字符串将只包含一个单词之间只有一个空格,并且没有标点符号。

我想出了这个功能。

var wordScoreCalculator = s =>
  s.toLowerCase().
  split('').
  map(s => s.charCodeAt(0)-0x60).
  filter(c => 1 <= c && c <= 26).
  reduce((x,y) => x+y, 0);

wordScoreCalculator('I live in this world');

目前,charCodeAt 正在与整个句子进行映射,并将所有单词加在一起计算为 208。

我想让它与索引一起使用,以便它单独计算每个单词并仅显示最高分。

在这种情况下,它应该显示 72。如何实现这一点?

非常感谢!

最佳答案

您需要另外映射每个单词,首先按空格分割。另外,因为根据条件字符串在单词之间仅包含一个空格并且没有标点符号,所以不需要过滤器,因为它听起来像单词将始终包含字母字符:

var wordScoreCalculator = s =>
  s.toLowerCase()
  .split(' ')
  .map(word => word
    .split('')
    .map(char => char.charCodeAt(0)-0x60)
    .reduce((x,y) => x+y, 0)
  )
  .reduce((a, b) => Math.max(a, b))

console.log(wordScoreCalculator('I live in this world'));
console.log(wordScoreCalculator('I live in this world zzzz'));

或者可能将单词映射到其值的操作抽象到它自己的函数中,以获得更好的可读性:

const wordToScore = word => word
  .split('')
  .map(char => char.charCodeAt(0)-0x60)
  .reduce((x,y) => x+y, 0);
const bestWordCalculator = s =>
  s.toLowerCase()
  .split(' ')
  .map(wordToScore)
  .reduce((a, b) => Math.max(a, b));
  
console.log(bestWordCalculator('I live in this world'));
console.log(bestWordCalculator('I live in this world zzzz'));

关于javascript - 使用 CharCodeAt 与索引而不是句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53392123/

相关文章:

javascript - Babel Compile 停止命令链

javascript - 访问类中的构造函数属性

javascript - 属性名称为 `undefined`

typescript - ES6 与 TypeScript 中的泛型类型混合

javascript - 使用 jquery ajax mysql 和 php 通过复选框过滤数据

javascript - 用 anchor 标记替换 http 链接

javascript - 连接列表的可排序滚动问题

javascript - 将动态颜色十六进制值传递给 PaintJS 插件的 data-pb-tint-colour

javascript - 数组数据在嵌套的异步箭头函数循环中丢失

javascript - 支持 Mocha ES6 测试吗?