这个问题以前是通过不同的方式提出的,但与这个问题并不相同。我想通过使用ES5或ES6编写一个函数来实现,该函数使用system A = 1, B = 2, C = 3 etc.
计算得分最高的单词。字符串在单词之间仅包含一个空格,不会出现标点符号。
我想出了这个功能。
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。如何实现?
非常感谢!
答案 0 :(得分:1)
您需要另外映射每个单词,首先在一个空格上分割。另外,因为根据条件The string will only contain a single space between words and there will be no punctuation
,不需要filter
,因为听起来单词将始终包含字母字符:
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'));