Javascript 更改字符串中的单个字符在循环中不起作用
所以,我正在做一些练习题。我的代码似乎工作得很好,直到我决定循环字符串以将句点的任何实例替换为空为止。由于某种原因,循环不起作用。我想这与不调用它有关,但我不确定如何调用循环。我认为循环会自动重写它们正在循环的内容。以下是练习和我不完整的解决方案: 编写JavaScript函数来参数化字符串Javascript 更改字符串中的单个字符在循环中不起作用,javascript,loops,Javascript,Loops,所以,我正在做一些练习题。我的代码似乎工作得很好,直到我决定循环字符串以将句点的任何实例替换为空为止。由于某种原因,循环不起作用。我想这与不调用它有关,但我不确定如何调用循环。我认为循环会自动重写它们正在循环的内容。以下是练习和我不完整的解决方案: 编写JavaScript函数来参数化字符串 函数字符串\u参数化(字符串){ var lowercase_string=string.toLowerCase(); var split_string=小写的_string.split(“”); var
函数字符串\u参数化(字符串){
var lowercase_string=string.toLowerCase();
var split_string=小写的_string.split(“”);
var joined_string=split_string.join(“-”);
对于(i=0;i log(字符串参数化(“来自美国的罗宾·辛格”)代码>您正在检查连接字符串[i]的值,而不是分配它
joined_string[i] = "";
不是
其他答案没有考虑到JavaScript中的字符串是不可变的。不能更改字符串中的单个字符。您构建了一个新字符串
在JavaScript中,字符串是不可变的。尝试更改字符串中的字符无效:
函数字符串\u参数化(字符串){
var lowercase_string=string.toLowerCase();
var split_string=小写的_string.split(“”);
var joined_string=split_string.join(“-”);
对于(i=0;i
您的代码不起作用,因为在if条件下,您正在检查连接的字符串[i]==“
是否等于”。
,实际上它等于“USA.”
。这就是为什么如果
条件从未满足,则返回”。在最终结果中:
if (joined_string[i]===".") {
joined_string[i]==="";
}
您可以在输出中输入您不想要的每个字符
var res = string.toLowerCase().replace(/[%\(\)\.\s]+/g, "-").replace(/-$/, "");
// ^ ^ ^ ^
// Here the characters you don't want to have in the output
+
表示匹配一次或更多次。将匹配的字符替换为-
然后用-$
删除最后一个-
总计
函数字符串\u参数化(字符串){
var res=string.toLowerCase().replace(/[%\(\)\.\s]+/g,“-”).replace(/-$/,”);
返回res;
}
console.log(字符串_参数化(“чччС”);//俄语句子
log(字符串_参数化(“Robin Singh%%(),来自美国”);
log(字符串_参数化(“Robin…Singh from USA…..”);
log(字符串参数化(“来自美国的罗宾·辛格”);
log(字符串参数化(“来自美国的罗宾·辛格”)代码>等号太多-连接的\u字符串[i]=“应该连接\u字符串[i]=“您的if中没有赋值。是否尝试连接\u字符串。替换(/\./g)”;--这样,您就不必遍历整个字符串并将所有句点(.)替换为“”。将“==”更改为“=”不起作用。什么任务会进入if?我还想不用正则表达式来做,因为我还没有学会。我正试图让循环工作,但它就是不起作用。接近选民:问题不仅仅是印刷错误。是的,代码中有一个输入错误,joined\u string[i]==”代码>本应是连接的_字符串[i]=“”代码>。然而,即使该错误得到纠正,代码仍然无法正常工作。因此,“题外话:印刷错误”不是一个有效/准确的结束理由。它对我仍然不起作用。它对我仍然不起作用。哇,谢谢!我还没有学会正则表达式,但我会研究一下。至于这部分。。。如果(joined_string[i]!==“){newString+=joined_string[i];}…你能解释一下这到底是什么意思吗?我把它理解为“如果连接字符串的索引不是句点,那么继续循环到新闻字符串中?”我很高兴能够提供帮助。我不确定你在评论中包含的代码是什么意思。至于正则表达式:它们是一个强大的工具;在很多情况下都很有用。有些情况下它们是最好的工具,有些情况下它们是不合适的。它们背后的概念在许多计算机语言中都很有用,但每种实现(语言)都可能有细微的不同。有一件事可能有助于学习它们,那就是使用正则表达式测试仪,但要确保它明确声明它使用JavaScript正则表达式?我试图在谷歌和YouTube上搜索+=的含义,但什么也找不到。@Andrew<代码>新闻字符串+=已加入的_字符串[i]
相当于newString=newString+joined_string[i]代码>。在这种情况下,它将joined_string[i]
的值连接到newString
的末尾,并将整个值分配给newString
。我不知道为什么一开始我不理解你的问题。这其实是清楚和合理的。不知怎的,我看错了。(续)@Andrew,(续)代码:if(joined_string[i]!=”){newString+=joined_string[i];}
说/做:如果当前字符不是
,那么将当前字符添加到新闻字符串的末尾。如果当前字符是要从字符串中删除的字符,则不会将当前字符添加到newString
。因为我们将它替换为零,'
,所以在if
中没有else{…}
子句。如果我们做的不是d
function string_parameterize(str){
return str.toLowerCase().replace(".", "").split(" ").join("-");
}
console.log(string_parameterize("Robin Singh from USA."));
//will result in: robin-singh-from-usa
if (joined_string[i]===".") {
joined_string[i]==="";
}
function string_parameterize(string) {
var lowercase_string = string.toLowerCase();
var split_string = lowercase_string.split(" ");
var joined_string = split_string.join("-");
joined_string = joined_string.replace(".", "");
return joined_string;
}
//Test Data :
console.log(string_parameterize("Robin Singh from USA."));
This is working in IE.
var res = string.toLowerCase().replace(/[%\(\)\.\s]+/g, "-").replace(/-$/, "");
// ^ ^ ^ ^
// Here the characters you don't want to have in the output