Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 由于某些原因,string.split不起作用_Javascript_Arrays_Node.js - Fatal编程技术网

Javascript 由于某些原因,string.split不起作用

Javascript 由于某些原因,string.split不起作用,javascript,arrays,node.js,Javascript,Arrays,Node.js,我试图通过将字符串拆分成一个数组并调用下一个可用单词来打印Michael的姓氏 当我运行这段代码时,我没有定义。我尝试使用Pythontutor查看我做错了什么,结果发现string.split不起作用 你能帮我看看,找出我做错了什么吗 这是我的密码: 函数getMichaelLastNameinputText{ 变量名称=输入文本; var newN=[names.split]; 对于var i=0;i在Michael之后返回单词 function getMichaelLastName(in

我试图通过将字符串拆分成一个数组并调用下一个可用单词来打印Michael的姓氏

当我运行这段代码时,我没有定义。我尝试使用Pythontutor查看我做错了什么,结果发现string.split不起作用

你能帮我看看,找出我做错了什么吗

这是我的密码:

函数getMichaelLastNameinputText{ 变量名称=输入文本; var newN=[names.split];
对于var i=0;i在Michael之后返回单词

function getMichaelLastName(inputText) {
  let newArr = []
  var names = inputText;
  var newN = names.split(" "); 
  for (var i = 0; i<newN.length; i++) {
    if(newN[i] === "Michael") {
      newArr = [...newArr, newN[i + 1]]
    }
  }
  return newArr
}
如果要返回姓氏:

function getMichaelLastName(inputText) {
  let newArr = ''
  var names = inputText;
  var newN = names.split(" "); 
  for (var i = 0; i<newN.length; i++) {
    if(newN[i] === "Michael") {
      newArr = newN[i + 1]
    }
  }
  return newArr
}

您的代码存在多个问题:

不要使用newN[i++],因为您正在更新i值。请改用newN[i+1]; 您遇到了一些scopes问题。您可以在此处了解更多信息: 如果句子的最后一个单词是“Michael”,您将得到一个溢出错误newN[i+1]不存在。 split函数已经返回了一个数组。 函数getMichaelLastNameinputText{ 变量名称=输入文本; var newN=names.split; 变量michaelLastnames=[]
对于var i=0;i正则表达式。搜索单词边界,然后按字母顺序搜索单词

交互式RegEx演示,解释如下: /\bMichael[A-Z][A-Z]*?\b/g是一种正则表达式文字语法,用/括起来表示正则表达式。正则表达式是一种模式语法,用于处理带有模式的文本。 \b查找单词边界。基本上,它查找非单词元素的边界。 迈克尔只是在找那根绳子。 [A-Z]查找大写字母 [a-z]*?是一个直到下一个单词边界才匹配的小写字母惰性序列\b

最后的映射和切片只是从所有找到的名称中切掉第一个名称。 ||[]对于未找到匹配项的情况,只返回一个空数组。 函数getMichaelLastNameinputText{ 返回inputText.match/\bMichael[A-Z][A-Z]*?\b/g | | |[]mapx=>x.slice'Michael'.length } console.log 你是谁?- Cool,John Williamns和迈克尔乔丹怎么样?我不知道,但是迈克尔·约翰逊很好。米迦勒,你仍然和勒布朗·詹姆斯、Quin Green、Aka明星和米迦勒得分吗? 函数getLastNamesinputText,name='Michael'{ const rex=new RegExpString.raw`\b${name}[A-Z][A-Z]*?\b`,'g' 返回inputText.matchrex | |[]mapx=>x.slicename.length+1 } console.log Cool,你好吗?- John Williamns,迈克尔乔丹怎么样?我不知道,但是迈克尔·约翰逊很好。米迦勒,你仍然和勒布朗·詹姆斯、斯普林格林、明星和特工得分吗? 麦克,你怎么样?- Cool,John Williamns和迈克尔乔丹怎么样?我不知道,但是迈克尔·约翰逊很好。米迦勒,你仍然和勒布朗·詹姆斯、斯普林特、阿克和克星得分吗?
这段代码使用正则表达式并捕获单词ie,即Michael之后的潜在姓氏

function getMichaelLastName(inputText) {
  let newArr = []
  var names = inputText;
  var newN = names.split(" "); 
  for (var i = 0; i<newN.length; i++) {
    if(newN[i] === "Michael") {
      newArr = [...newArr, newN[i + 1]]
    }
  }
  return newArr
}
const regex=/Michael\w+/gm; 康斯特尔=米迦勒,你好吗?- Cool,John Williamns和迈克尔乔丹怎么样?我不知道,但是迈克尔·约翰逊很好。米迦勒,你仍然有得分与勒布朗·詹姆斯,绿色? 让m; 而m=regex.execstr!==null{ //这是避免具有零宽度匹配的无限循环所必需的 如果m.index==regex.lastIndex{ regex.lastIndex++; } //可以通过'm`-变量访问结果。 m、 forEachmatch,groupIndex=>{ log`find match,group${groupIndex}:${match}`; }; } 函数getMichaelLastNameinputText{ var Michaels=[]; 变量名称=输入文本; var newN=名称。拆分“”; 对于变量i=0;i3 Michaels.pushnewN[i+1].替换“?”,; } } 返回迈克尔斯; } console.log 你是谁?- Cool,John Williamns和迈克尔乔丹怎么样?我不知道,但是迈克尔·约翰逊很好。米迦勒,你仍然和勒布朗·詹姆斯、Quin Green、Aka明星和米迦勒得分吗?
这是因为如果你在“”处切分,Michael部分将不是Michael,而是Michael,newN是一个包含字符串数组的1元素数组。无论条件结果如何,你每次都会在第一次循环迭代中返回。它返回未定义的。一旦此错误被修复,我将尝试修复其他错误。你能在控制台上运行它吗?@dandavis你能告诉我如何修复它吗?不要在names.split周围放[]。split返回一个数组,你不需要把它放在另一个数组中。也许可以让michaelLastname成为一个数组,然后把所有的名字都放到数组中。这只是@bitch_ctrl1的一个想法。michaelLastname声明它是一个全局范围,我想。2.我想我知道newN[i++]但是我仍然使用它。我不知道为什么。3.我对退货类型有点困惑。你能给我一个指南或者一些帮助我处理退货的东西吗
类型函数?非常感谢你的回答。它帮助lotreturn退出函数并返回一个值。您试图做的更像是.map。split已返回数组。[blah.split]会将结果封装在一个数组中,并给你[[split1,split2,split3]]只需在Google上查找函数,找出它们返回的内容嗨,你的代码是准确的,并返回我想要的内容。你能解释一下它是如何工作的吗?这里有详细说明的交互式演示:这个网站非常有用。我仍然有些怀疑。如果我错了,请纠正我/\bMichael[A-Z][A-Z]*?\b在字符串中查找单词Michael。g代表全球范围。*?是为了限制搜索次数||[]将其推入空阵列。现在我不明白这ES6部分。我认为它正在映射字符串。但我们为什么需要地图呢。我们不能只使用Push吗?不| |[]不会推送到空数组。如果在本例中匹配为false或null,则返回空数组。这避免了null。map不是函数。*?实际上没有必要,而且会起作用。.match的返回值已经是数组。它只需遍历数组中的所有字符串并删除第一个名称。map作为一种一次性理解比创建for循环来推送到一个新数组更简洁。你是说第二个可以用于任意名称的函数吗?它使用RegExp构造函数使用模板字符串语法编译一个名为${name}的正则表达式,因为我不能使用regex literal进行编译,因为regex literal不允许在运行时构造任意regex。String.raw是一个新的模板字符串函数,它允许处理原始字符串,因此我不必转义“\”。