Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 编写一个函数,该函数接受一个字符串并返回一个新字符串,其中只包含传递给该字符串的大写字母_Javascript_String_Function_Uppercase - Fatal编程技术网

Javascript 编写一个函数,该函数接受一个字符串并返回一个新字符串,其中只包含传递给该字符串的大写字母

Javascript 编写一个函数,该函数接受一个字符串并返回一个新字符串,其中只包含传递给该字符串的大写字母,javascript,string,function,uppercase,Javascript,String,Function,Uppercase,所以我在rithm school的javascript教程中遇到了这个等式(这到目前为止非常好):编写一个名为onlyCapitalLetters的函数,它接受一个字符串并返回一个新字符串,其中只传递给字符串的大写字母。这是请求的输出: onlyCapitalLetters("Amazing") // "A" onlyCapitalLetters("nothing") // "" onlyCapitalLetters("EVERYTHING") // "EVERYTHING" 我们已经有了这个

所以我在rithm school的javascript教程中遇到了这个等式(这到目前为止非常好):编写一个名为onlyCapitalLetters的函数,它接受一个字符串并返回一个新字符串,其中只传递给字符串的大写字母。这是请求的输出:

onlyCapitalLetters("Amazing") // "A"
onlyCapitalLetters("nothing") // ""
onlyCapitalLetters("EVERYTHING") // "EVERYTHING"
我们已经有了这个解决方案,但是它使用了这个.charCodeAt()方法,他们以前没有讨论过这个方法,而且看起来非常复杂。现在我正在阅读大量与之相关的文档,但仍然无法挖掘

在我研究他们的解决方案之前,我自己尝试了一些其他的方法,这是基于本教程中已经介绍的内容

rithm学校的解决方案:

function onlyCapitalLetters(str){
  var newStr = '';
  for(var i = 0; i < str.length; i++){
    if(str[i].charCodeAt(0) < 91 && str[i].charCodeAt(0) > 64 ){
      newStr += str[i];
    }    
  }
  return newStr;
}
它把字符串原样还给了我,而不是一个新的、唯一的大写字符串

“TbRnY OnUmT”


有没有一种方法,在我尝试过的这个简化的方向上,实现这个功能?此外,是否有人对这个charCodeAt及其总体解决方案有一些见解?这是我的第一篇帖子,所以还是要谢谢你的帮助

我将使用
regex
来完成它

/[A-Z]/g
匹配所有大写字母

join(“”)
将匹配的字符数组转换回字符串

仅限函数capitalletters(输入){
设op=input.match(/[A-Z]/g)| |”
如果(op)op=op.join(“”)
控制台日志(op)
}
只有大写字母(“惊人”)/“A”
仅大写字母(“无”)/“”
仅限Capitalletter(“所有内容”)

仅限Capitalletters(“TbRnY OnUmT”)关于你的尝试,你几乎成功了!你的错误是:

  • toUpperCase
    应该是
    toUpperCase()
    ,因为它是必须应用的方法
  • 删除空的
    {}
    块;这将防止仅当
    语句为true时执行以下语句;还可以在
    {}
    块内移动串联
修改后的版本如下:

仅函数资本(字符串){
var newString='';
对于(i=0;i
仅函数capitalletters(字符串){
//初始化函数响应。
让我们回答=”;
//匹配所有大写字母组。
让result=string.match(/([A-Z]+)/g);
//检查是否匹配。
if(result!=null&&result.length){
//删除匹配结果的第一个元素(返回原始字符串)。
result.unshift();
//将数组连接到带有空“分隔符”的字符串中。
响应=结果。连接(“”);
}
控制台日志(响应);
返回响应;
}
只有大写字母(“惊人”)/“A”
仅大写字母(“无”)/“”
仅大写字母(“所有内容”)/“所有内容”
仅capitalletters('TbRnY OnUmT');/“TRYOUT”
要修复代码,请使用包含括号并在if语句中连接字符串:

if (string[i] === string[i].toUpperCase()) {
  newString += string[i];
}
请注意,如前所述,此函数不会从字符串中删除特殊字符。使用
nothing@#
将返回
@

比如说

仅函数capitalletters(字符串){
var newString='';
for(设i=0;ilog(仅限于capitalletters('nothing@#'))
这是一个紧凑的解决方案

var string = "ABCefgGHaI";
首先,替换除字母以外的所有字符

string.replace(/[^a-z]/gi, '')

(string.split('').filter((item)=>{return item == item.toUpperCase()})).join("")

您可以通过拆分单词并只过滤大写的单词并将其重新连接:)

另一个选项是使用
数组分解
作为函数参数

const only capitalletters=([…myarr]=e)=>myarr.filter(el=>el==el.toUpperCase()).join(“”);
log(仅限于capitalletters(“惊人”);
console.log(仅capitalletters(“nothing”);

日志(仅限于capitalletters(“一切”)
,那么code>应该是
()
是重要的,所以我认为你的解决方案更好:)结束括号的位置
}
也是错误的。它是否也适用于像“abc@#”(带有特殊字符)这样的字符串或者事实并非如此?您的第二个输出与第一个不同<代码>空格
在第二个空格中缺失。我想
[^A-Z]+
就是你想要的meant@CodeManiac我明白了,夏普。我用
\s
更新了它。非常感谢。不过,第一个片段并不是问题所要问的<代码>没有任何内容将输出
@
,我建议不要将其添加到代码段中。这使得答案更具交互性。代码失败。试试这个
nothing@#
看看output@CodeManiac我相应地更新了我的答案:)谢谢!非常感谢你!虽然承认这是语法错误很有趣,但我确实从您的回答中学到了很多。更确切地说,
charCodeAt
返回的代码单位值来自UTF-16字符编码,应用于字符集的代码点。与ASCII的任何相似之处都是无关紧要的!但看看@CodeManiac指出了什么。尝试将字符串的值改为nothing@#并查看发生了什么感谢您指出了这一点。首先更新了答案,删除此正则表达式输入的所有字符。替换(/[^a-z]/gi,“”)
var string = "ABCefgGHaI";
string.replace(/[^a-z]/gi, '')

(string.split('').filter((item)=>{return item == item.toUpperCase()})).join("")