javascript - 类型错误 : myArr[i]. splice 不是函数

标签 javascript arrays typeerror splice

我在堆栈溢出上多次看到这个问题,但是,我找不到类似的情况来了解问题可能是什么。我有一个根据正则表达式匹配拆分的数组。然后我通过 for 循环运行该字符串。如果第一个字母不是大写,我对其执行 .toUpperCase 。问题是当我尝试将其拼接回去时。我能够毫无问题地执行 toUpperCase,但是,toUpperCase 之后的拼接给了我一个类型错误。有人可以告诉我为什么会遇到这个问题以及如何解决它吗?

var sn = "i am done. i want candy! how are you? i am fine.";

function upperCasing(x){
   var myArr = x.match( /[^\.!\?]+[\.!\?]+/g );
   myArr.splice(0,0);
   for(var i = 0; i < myArr.length; i++){
      if(myArr[i].charAt(1).match(/[a-z]/g)){
          var newArr = myArr[i].charAt(1).toUpperCase() + myArr[i].splice(0,1);
          console.log(newArr);
      }
  }
}

upperCasing(sn);

基于下面提供的答案的工作解决方案加上我必须添加 .trim();

var sn = "i am done. i want candy! how are you? i am fine.";

function upperCasing(x){
  var myArr = x.match( /[^\.!\?]+[\.!\?]+/g );
  myArr.splice(0,0);
  var newArr = [];
  console.log(myArr);
  for(var i = 0; i < myArr.length; i++){
      //Trimmed unwanted white space caused by the space before each sentence.
      myArr[i] = myArr[i].trim();
      if(myArr[i].charAt(0).match(/[a-z]/g)){
          //Used substr method but changed it to 1 instead of 2
          newArr.push(myArr[i].charAt(0).toUpperCase() + myArr[i].substr(1));
      }
   }
   console.log(newArr.join(' '));
}

upperCasing(sn);

最佳答案

您正在使用Array.prototype.splice(),不需要返回预期结果。在 for 循环中将 newArr 定义为变量不会从函数调用中返回 newArr.splice() 可以从 Array 中删除元素,而不是 String

另请注意,.charAt(0) 将是大于 0myArr 索引处的空格字符。

如果您尝试返回替换myArr字符串开头的大写字母或后面的空格字符后的字符串,您可以使用Array.prototype .map()String.prototype.replace()RegExp /(\s?\w)/、链Array.prototype.join() 带有参数 ""

var sn = "i am done. i want candy! how are you? i am fine.";

function upperCasing(x){
   var myArr = x.match( /[^\.!\?]+[\.!\?]+/g );
   return myArr.map(function(text) {
     return text.replace(/(\s?\w)/, function(match) {
       return match.toUpperCase()
     })
   }).join("")
}

var res = upperCasing(sn);

console.log(res);

关于javascript - 类型错误 : myArr[i]. splice 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42082847/

相关文章:

javascript - 动态更改字段的欧芹规则

javascript - 如何使大文本字段的文本框变宽

javascript - 为什么我的 JavaScript 在使用 Blazor 时不能正确呈现?

c - c中的数组迭代strstr

javascript - Chrome dev - 无法分配给只读属性

javascript OOP - 不是函数

javascript - 在 native react 中绘制垂直虚线

java - 数组多重赋值的意外输出

arrays - 为什么调用此函数时 $args 数组为空?

vue.js - [Vue警告] : Error in render: "TypeError: Cannot read properties of undefined (reading ' length')"error when using datatables in vue