【问题标题】:Shorter more efficient way to tackle this codewars challenge?解决这个代码战挑战的更短更有效的方法?
【发布时间】:2021-04-01 04:24:52
【问题描述】:

我对 JavaScript(和一般开发)相当陌生。我想尝试来自 Codewars 的挑战。挑战是通过一个函数处理一个字符串,该函数将翻转任何超过 5 个字符的单词并返回带有这些翻转单词的原始字符串。这是我想出的代码(它确实有效!)。

//this function turns each word into an array that will get flipped.
let wordFlipper = (word) => { 
  var splitWord = word.split('');   //convert word to array
  var reversedWord = splitWord.reverse();   //flips the indexes for the array
  var joinReversedWord = reversedWord.join('').toString();   //turns array back to a string.
  return joinReversedWord;
}

function spinWords(phrase){
    let finalArray = [];
    let wordsToArray = phrase.split(' ');
    const processFlipWords = wordsToArray.forEach(word => {
      if (word.toString().length > 4) {
      var flippedWord = wordFlipper(word); //here's where we call the function wordFlipper()
      finalArray.push(flippedWord);
      }
      else {
      finalArray.push(word);
      }
    });
    return finalArray.join(' ');
}

您的专家建议如何写这篇文章?我确信我在编写这段代码时效率不是很高。

谢谢!

Here's what it looks like inside codewars!

【问题讨论】:

  • 请发布“确实有效!”的代码到Code Review。 SO 适用于失败的代码????
  • @hc_dev 哦,你是对的!下次我会注意的!抱歉,这只是我的第二篇文章!现在已经把它加入书签了!
  • 好吧,一旦你尝试过,你就会喜欢那里的评论者。第二次问的好问题???继续发帖,期待更多????

标签: javascript arrays function


【解决方案1】:

我会使用正则表达式来匹配5个或更多单词字符 (\w{5,}),并有一个替换函数String.replace()) 返回反向的 (reverse()) 字:

const spinWords = phrase => phrase.replace(
  /\w{5,}/g,
  word => [...word].reverse().join('')
);

console.log(spinWords('foo barbar more words go here'));

\w 匹配单词字符 - 从 A 到 Z、不区分大小写、数字或下划线。

括号表示重复前一个标记的次数。 {5,} 以 5 开头(因此,“至少 5”),逗号后没有任何内容(“最多为任意数字”)。

然后/g,全局标志,匹配并替换与此模式匹配的每个子字符串,而不仅仅是第一个。

回调函数对每个匹配的子字符串运行,其中参数是匹配的子字符串,并且返回的内容在原始字符串中的该点被替换。

【讨论】:

  • 哇,太疯狂了。非常感谢!我将研究那里的代码是如何工作的。我还没有看到使用的省略号(我的 javascript 课程还没有完全完成)。不幸的是,我也不知道 /\w{5,}/g 是什么意思,哈哈。我希望这一切很快就会变得更有意义!谢谢!
  • \w 匹配单词字符 - 从 A 到 Z、不区分大小写、数字或下划线。括号表示重复前一个标记的次数。 {5,} 以 5 开头(因此,“至少 5”),逗号后没有任何内容(“最多为任意数字”)。然后/g,全局标志,匹配并替换与此模式匹配的每个子字符串,而不仅仅是第一个。回调函数针对每个匹配的子字符串运行,其中参数是匹配的子字符串,并且返回的内容在原始字符串中的该点被替换。
  • 知道了!我正在研究所有这些以备将来使用。感谢您的宝贵时间!
  • @CertainPerformance 您对正则表达式进行了全面的解释。可以直接粘贴到您的答案中。我已经编辑以突出显示重要部分?
最近更新 更多