我一直在使用我所学/所知的知识来实践简单的解决方案。我面临的问题是,如何将字符串中的大写字母移到前面?

我已经解决了这个问题,但并没有达到我的预期,因为我最初的想法是→找到大写字母→将它们放在数组中→将大写字母与原始字符串数组连接起来,去掉其中的大写字母。

因此,我的问题是,如何删除第一个条件语句中的大写字母,以便不需要创建另一个条件语句来查找小写字母并将小写字母存储在数组中?

例如,输入字符串为“你好”输出将是“你好”(大写字母现在在前面)。

谢谢您!

功能盖到前部{var sp=s.split(“”);var caps=[];var下限=[]对于(var i=0;i<sp.length;i++){如果(sp[i]==sp[i].toUpperCase()){盖帽推动(sp[i]);**//如何删除“sp”数组中的大写字母,因为我已将其推入大写数组**}if(sp[i]==sp[i].toLowerCase()){下推(sp[i]);}}return caps.join(“”).concat(lower.join(“”));}
2
  • 提供输入数组和预期的输出数组将很有帮助! 评论 2020年7月19日7:09
  • 1
    sp.拼接(i,1)刚好在…之后盖帽推动(s[i])最后你可以做….concat(sp.join(“”)),不需要第二个如果. 评论 2020年7月19日7:11

4个答案4

重置为默认值
7

使用RegExp公司,您可以在一行中完成目标,而无需任何循环:

const result=[…'helLLo'].sort(l=>/[A-Z]/.test(l)-1:0).join(“”);console.log(结果);//L你好

如果要确保保留大写字母之间的原始顺序,它将略长:

const result=[…'Hello World Foo Bar'].sort((a,b)=>/[a-Z]/.test(a)/[A-Z]/.测试(b)?0 : -1 : 0).join(“”);console.log(结果);//HWF世界末日

2
  • 1
    嗨,谢谢!但不幸的是,我一直很难理解正则表达式,因为我似乎无法掌握它的基础,因此只能求助于循环的基本原理。但是的,谢谢你的回答!我会为理想的解决方案选择你的答案。但我也很想知道如何使用splice。 评论 2020年7月19日7:33
  • /[A-Z]/.试验(A)收益真的如果一封信是从哪里来的A类Z轴希望能有所帮助! 评论 2020年7月19日7:34
2

使用Regex,您可以通过较小的循环实现目标。

功能盖到前部(sp){让upperRgx=/[A-Z]/g;let upperLetters=sp.match(upperRgx);for(设i=0;i<upperLetters.length;i++){让indx=sp.indexOf(大写字母[i]);sp=sp.substring(0,indx)+sp.substrang(indx+1,sp.length);}sp=大写字母.join(“”)+sp;返回sp;}console.log(capToFront(“helLLo”))//输出:LLheo

1

使用剪接方法删除。

功能盖到前部{var sp=s.split(“”);var caps=[];var下限=[]对于(var i=0;i<sp.length;i++){如果(sp[i]==sp[i].toUpperCase()){盖帽推动(sp[i]);//使用“splice”方法删除sp.splice(i,1);}if(sp[i]==sp[i].toLowerCase()){下推(sp[i]);}}控制台.log('sp',sp);return caps.join(“”).concat(lower.join(”“));}console.log(capToFront(“stAck”))

1

您也可以尝试这种方法,检查字符的ASCII值,因为大写字母位于65和90然后使用.sort(排序).加入数组上相应的方法

功能盖到前部{var sp=s.split(“”);const res=sp.sort((a,b)=>是Caps(a)?是大写字母(b)吗?0 : -1 : 0)返回res.join(“”)}函数isCaps(c){return c.charCodeAt()>=65&&c.charCode()<=90}控制台.log(capToFront('hIsAmplEStRing'))

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.