freeCodeCamp 每日一题 Challenge 32:用一行链式调用实现 Reverse Sentence 字符串倒序

📅 发布时间:2026/9/8 19:02:50
freeCodeCamp 每日一题 Challenge 32:用一行链式调用实现 Reverse Sentence 字符串倒序 freeCodeCamp 每日一题 Challenge 32用一行链式调用实现 Reverse Sentence 字符串倒序【免费下载链接】freeCodeCampfreeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCamp本篇指南基于 freeCodeCamp 课程仓库中的每日一题文件 Challenge 32: Reverse Sentence 展开完整解读这道 JavaScript 字符串处理题的任务规则、四组断言用例、参考种子代码与官方解法并深入剖析split(/\s/).reverse().join( )这一核心链式调用的工作原理与易错点。读完后你能独立写出通过全部测试用例的实现并理解这道题在 freeCodeCamp 每日编程挑战体系中的定位。任务规则与测试用例题目文件位于 daily-coding-challenges-javascript 目录其原始描述为Given a string of words, return a new string with the words in reverse order. For example, the first word should be at the end of the returned string, and the last word should be at the beginning of the returned string.即给定一个由若干单词组成的字符串返回一个新字符串其中单词顺序被整体颠倒——原来第一个单词放到末尾最后一个单词放到开头。题目附加了两条关键约束输入字符串中单词之间可以由一个或多个空格分隔返回字符串中单词之间只允许有一个空格。这两条约束直接决定了实现不能简单依赖split( )按单个空格切分会产生空字符串项必须用正则\s匹配一个或多个空白符。题目提供了四组assert.equal断言作为验收标准assert.equal(reverseSentence(world hello), hello world);assert.equal(reverseSentence(push commit git), git commit push);assert.equal(reverseSentence(npm install apt sudo), sudo apt install npm);assert.equal(reverseSentence(import default function export), export function default import);前两组是常规情形单词间只有单空格直接倒序即可。后两组是重点考察对象——输入中存在连续多个空格如npm install apt sudo中install后有 3 个空格、apt后有 4 个空格输出必须把这些不规则空白归一化为单词间单个空格。如果实现只做了倒序而没处理空白归一化这两组用例会直接失败。参考实现与逐环节解析题目自带的种子代码seed是一个未完成的函数骨架要求你补全reverseSentence(sentence)的函数体function reverseSentence(sentence) { return sentence; }文件末尾给出的官方解法只有一行function reverseSentence(sentence) { return sentence.split(/\s/).reverse().join( ); }下面逐环节拆解这行链式调用1.split(/\s/)按一个或多个空白符切分正则\s匹配空白字符空格、制表符、换行等量词表示一个或多个。因此/\s/会把任意长度的连续空白视为同一个分隔符切分结果是一个干净的单词数组不含空字符串项world hello.split(/\s/)→[world, hello]npm install apt sudo.split(/\s/)→[npm, install, apt, sudo]这正是满足输入可由一个或多个空格分隔约束的关键一步。2.reverse()原地颠倒数组顺序Array.prototype.reverse()将数组元素原地反转并返回同一数组引用。上一步的数组[npm, install, apt, sudo]反转后变为[sudo, apt, install, npm]。注意它反转的是单词的顺序而不是每个单词内部的字符——题目要求的是词序颠倒字符序保持不变。3.join( )用单个空格重新拼接join( )以单个空格为连接符将数组合并为字符串。这一步天然满足了返回字符串中单词间只有一个空格的第二条约束——无论输入端有多少个连续空格输出端都只保留一个。三个环节合起来恰好与题目两条约束一一对应这也是该解法能以最短代码通过全部四组断言的原因。常见错误写法与辨析结合测试用例可以归纳出两种典型错误实现// 错误 1按单空格切分 function reverseSentence(sentence) { return sentence.split( ).reverse().join( ); }split( )会在连续空格处产生空字符串项a b.split( )得到[a, , b]。反转后拼接会产生b a这类保留了多余空格的输出甚至夹带前导/尾随空格无法通过后两组断言。// 错误 2只归一化空白忘了倒序 function reverseSentence(sentence) { return sentence.split(/\s/).join( ); }这种写法只完成了空白归一化词序保持原样前两组断言即会失败。此外还有一个值得注意的边界情形当输入以空白开头或结尾时split(/\s/)会返回以或尾随空字符串开头的数组例如 hello.split(/\s/)→[, hello]。由于本道每日题的测试用例均为普通单词序列官方解法未显式处理该情形即可全部通过若在通用场景中复用这段代码可以补一句filter(Boolean)剔除空项function reverseSentence(sentence) { return sentence.split(/\s/).filter(Boolean).reverse().join( ); }这道题在仓库中的组织方式从文件结构看该挑战由三部分组成均以 题目 Markdown 文件 为单元frontmatter 元数据id68af0687ef34c76c28ffa54b、titleChallenge 32: Reverse Sentence、challengeType: 28、dashedName。其中challengeType: 28的含义可以从 challenge-types.ts 得到确认const dailyChallengeJs 28即JavaScript 每日编程挑战类型对应地dailyChallengePy 29是 Python 每日题类型。# --hints--区即上文四组assert.equal断言是题目页面的提示内容也是判分依据。# --seed--/# --solutions--区分别存放学员看到的种子代码与可展示的参考解答。挑战的排序与归属则定义在 daily-coding-challenges-javascript.json 中该 block 的dashedName为daily-coding-challenges-javascriptchallengeOrder数组里按id精确登记了每一题Challenge 32 的条目即为{id: 68af0687ef34c76c28ffa54b, title: Challenge 32: Reverse Sentence}紧邻前一篇 Challenge 31: Array Diff 与后一篇 Challenge 33。在运行时侧按日期取题的公开接口由 daily-coding-challenge.ts 中的路由实现/daily-coding-challenge/today、/daily-coding-challenge/date/:date等从数据库按美国中部时间当日零点查询对应挑战挑战的提交与判分仍走主 API 的常规挑战完成路由这一点在该路由文件的头部注释中有明确说明。小结Reverse Sentence 看似只是把单词顺序反过来但两条约束把它变成了一个考察正则空白切分与数组链式调用的微型实战题split(/\s/)负责把不规则空白归一为分隔符reverse()负责颠倒词序join( )负责输出端的标准间距。掌握这条split → reverse → join链后同类按空白分词 重排 标准化拼接的需求如去重、过滤、按长度排序单词都可以在此基础上直接套用。【免费下载链接】freeCodeCampfreeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCamp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考