挑战的链接:
https://www.freecodecamp.com/challenges/using-objects-for-lookups
在这个挑战中,我不得不产生switch语句的对象版本。 我必须记住switch_的每个_'case'成员来生成对象版本,因此我注释掉了整个switch部分,然后重新键入了正确的对象版本。
不过,我无法通过考试。
这是由于对You should not use case, switch, or if statements
在注释掉开关的过程中,它不应验证_switch_的用法,而应将其视为注释。
// Setup
function phoneticLookup(val) {
var result = "";
// Only change code below this line
var lookup = {
"alpha":"Adams",
"bravo":"Boston",
"charlie":"Chicago",
"delta":"Denver",
"echo":"Easy",
"foxtrot":"Frank"
};
result = lookup[val];
/*
switch(val) {
case "alpha":
result = "Adams";
break;
case "bravo":
result = "Boston";
break;
case "charlie":
result = "Chicago";
break;
case "delta":
result = "Denver";
break;
case "echo":
result = "Easy";
break;
case "foxtrot":
result = "Frank";
}
*/
// Only change code above this line
return result;
}
// Change this value to test
phoneticLookup("charlie");
@ Saif-Shines是的,我们知道这是主网站上的现有问题,并且如果您愿意,我们确实缺乏基础架构来拥有严格的解析器。
当前唯一的方法是删除注释。
潜在的贡献者,这需要在这里进行调查:
https://github.com/freeCodeCamp/freeCodeCamp/blob/staging/client/rechallenge/throwers.js#L16
/ cc @BerkeleyTrue
关于Basic Javascript的第一个挑战,我在尝试评论时遇到了类似的问题:
// Use comments only when they are actually needed
/* Sometimes, using descriptive names for variables and functions is way better
than leaving code smell all over your code */
在这种情况下,因为在我的第二条评论中,我使用了“功能”一词,所以会抛出:
Error: SyntaxError: Unsafe or unfinished function declaration
也许为contents.replace(/\/\*[\s\S]*\*\/|\/\/[^\n]*/gi,''))
而不是contents
运行测试可以解决该问题? (表示一般问题,因为在我看来,由于替换注释后内容为空,因此该特定测试仍然会失败)
我们不能做这样的事情:
Node node = nodeList.item(i);
if(node.getNodeType() == Node.COMMENT_NODE) {
continue;
} else {
//do something
}
我想承担这个。
我对这个问题很感兴趣,可以将它分配给我,又可以将我定向到需要更改的文件吗?
由于超过一个星期没有更新,因此我将继续处理。 希望你们一切都好@ Survivor75和@ knrt10
@raisedadead :我相信解决方案比我们一直想的要简单得多。
我们在code
上运行断言,它是一个字符串。 那么,为什么不在此字符串上运行正则表达式并删除注释,然后再将其用于验证呢?
例如,在- client/frame-runner.js
,我们获取codemirror编辑器的内容,例如
const editor = { getValue() { return source; } };
const code = source;
与其直接按原样传递代码,不如运行正则表达式以消除诸如
const editor = { getValue() { return source; } };
const code = source.replace(/\/\*[\s\S]*?\*\/|[^\S]\/\/.*$/gm, '');
这样,测试运行程序就永远不会收到代码中的注释,一切都很好。
我已经在这里验证了此正则表达式-http: //regexr.com/3ghvi
注意:
//
的字符,因此我们不会替换不存在于其行上的内联注释。@adityaparab非常酷:+1
当我从事其他工作时,我几乎忘了它。
但是,我想出了这段代码,如果您要进行此工作,请查看以下功能。
function stripComments ( code ) {
return code . replace (/\/\/.*|\/\*[^]*?\*\// g , "") ;
}
这将删除所有注释的代码:)
不幸的是,这里唯一真正的解决方案是使用AST进行测试。 我已经与@QuincyLarson讨论了有关添加一个API的问题,该API公开了babel产生的JS AST,并添加了一个类似于eslint的插件接口的API。 这可能有点偏离,因为优先级是继续应对挑战,然后概括从文件中导入挑战本身的方式。
我刚遇到这个问题,并在评论中包含了“功能”一词...我真的很困惑,直到某个论坛的人解释了发生了什么。 希望这个问题能尽快解决! 也许应该向用户显示一些消息,警告他们有关挑战中的注释的解析器问题?
也可以看看:
https://forum.freecodecamp.org/t/javascript-tests-in-challenges-no-longer-working-correctly/190249
@SuperGeniusZeb感谢您报告此情况,并确认重现此步骤。
由于这个问题最近一直没有解决,因此我将其过时的关闭。 如果您认为这仍然与新更新的平台有关,请说明原因,然后重新打开它。
@昆西·拉森
在更新的站点中,挑战测试仍将注释错误地理解为代码。 以这个挑战为例:
使用以下代码,即使grid-column-gap: 20px
在注释中,我也可以通过测试(检查grid-column-gap
是否设置为20px
)。
<style>
.d1{background:LightSkyBlue;}
.d2{background:LightSalmon;}
.d3{background:PaleTurquoise;}
.d4{background:LightPink;}
.d5{background:PaleGreen;}
.container {
font-size: 40px;
min-height: 300px;
width: 100%;
background: LightGray;
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 1fr 1fr 1fr;
/* add your code below this line */
grid-column-gap: 10px;
// grid-column-gap: 20px;
/* add your code above this line */
}
</style>
<div class="container">
<div class="d1">1</div>
<div class="d2">2</div>
<div class="d3">3</div>
<div class="d4">4</div>
<div class="d5">5</div>
</div>
请重新打开此问题。
@SuperGeniusZeb您能在https://github.com/freeCodeCamp/learn/issues打开新期刊吗? 非常感谢。
@raisedadead我刚刚在那里创建了一个新期刊:
https://github.com/freeCodeCamp/learn/issues/165
最有用的评论
@ Saif-Shines是的,我们知道这是主网站上的现有问题,并且如果您愿意,我们确实缺乏基础架构来拥有严格的解析器。
当前唯一的方法是删除注释。