Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.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_Regex_Typescript_Function - Fatal编程技术网

Javascript 我得到了一个“答案”;对象可能为空";尝试从字符串返回字符和数字计数时出错

Javascript 我得到了一个“答案”;对象可能为空";尝试从字符串返回字符和数字计数时出错,javascript,regex,typescript,function,Javascript,Regex,Typescript,Function,因此,我试图返回输入字符串中多次出现的字符和数字的计数 例如,如果我输入“zzrrcde”,我会得到2,因为z和r的值大于1 下面是我在研究后提出的函数。我想用正则表达式代替双循环。但是,我得到以下错误:TS2531对象可能为空。有人能解释为什么会发生此错误吗?在本例中,我在返回中调用text export function duplicateCount(text: string): number { try{ return text.toLowerCase().split("&q

因此,我试图返回输入字符串中多次出现的字符和数字的计数

例如,如果我输入
“zzrrcde”
,我会得到2,因为
z
r
的值大于1

下面是我在研究后提出的函数。我想用正则表达式代替双循环。但是,我得到以下错误:
TS2531对象可能为空。
有人能解释为什么会发生此错误吗?在本例中,我在返回中调用
text

export function duplicateCount(text: string): number {
  try{ return text.toLowerCase().split("").sort().join("").match(/(.)\1+/g).length; }
  catch(e){ return 0; }
}

console.log(duplicateCount("aabbcde"))
然后我通过创建一个变量
var newText=text
尝试了这个示例,但仍然得到了相同的错误

export function duplicateCount(text: string): number{
  var newText = text;
  try{ return newText.toLowerCase().split("").sort().join("").match(/(.)\1+/g).length; }
  catch(e){ return 0; }
}

console.log(duplicateCount("aabbcde"))

有人知道我做错了什么吗?我正在学习TypeScript,因此如果您能提供任何深入的解释,我将不胜感激。

如果匹配项为空,您可以添加一个默认值

export function duplicateCount(text: string): number {
  try {
    return text.toLowerCase().split("").sort().join("").match(/(.)\1+/g)?.length || 0;
  }
  catch (e) {
    return 0;
  }
}

console.log(duplicateCount("aabbcde"))

如果匹配项为空,则可以添加默认值

export function duplicateCount(text: string): number {
  try {
    return text.toLowerCase().split("").sort().join("").match(/(.)\1+/g)?.length || 0;
  }
  catch (e) {
    return 0;
  }
}

console.log(duplicateCount("aabbcde"))

当全局正则表达式与字符串中的任何内容不匹配时,它将返回
null
,而不是返回空数组。例如,使用您的代码:

函数重复计数(文本){
返回text.toLowerCase().split(“”).sort().join(“”).match(/(.)\1+/g).length;
}

log(duplicateCount(“abc”)
当全局正则表达式与字符串中的任何内容都不匹配时,它将返回
null
,而不是返回空数组。例如,使用您的代码:

函数重复计数(文本){
返回text.toLowerCase().split(“”).sort().join(“”).match(/(.)\1+/g).length;
}

console.log(duplicateCount(“abc”))
您真的需要
试试吗

函数重复计数(文本){
如果(!text)返回0;
让matchedaray=text.toLowerCase().split(“”.sort().join(“”).match(/(.)\1+/g);
返回matchedaray?matchedaray.length:0;
}
console.log(duplicateCount(“aabbcde”))
console.log(重复计数(“abcdee”))

console.log(duplicateCount(“”)
您真的需要
试试吗

函数重复计数(文本){
如果(!text)返回0;
让matchedaray=text.toLowerCase().split(“”.sort().join(“”).match(/(.)\1+/g);
返回matchedaray?matchedaray.length:0;
}
console.log(duplicateCount(“aabbcde”))
console.log(重复计数(“abcdee”))

console.log(duplicateCount(“”)
.match
可以返回
null
。match
可以返回
null
@certainPerformance谢谢!你能解释一下const countByChar:{[char:string]:number}={}在做什么吗?countByChar是一个新对象,它接受一个类型设置为string的字符并返回一个数字?它表示新对象的键是字符串,值是数字。例如,当前键入将禁止
countByChar[char]=(countByChar[char]| |“)+“x”
,因为这将分配一个值,该值是一个需要数字的字符串。@certainPerformance谢谢!你能解释一下const countByChar:{[char:string]:number}={}在做什么吗?countByChar是一个新对象,它接受一个类型设置为string的字符并返回一个数字?它表示新对象的键是字符串,值是数字。例如,当前键入将禁止
countByChar[char]=(countByChar[char]| |“)+“x”
,因为这将分配一个值,该值是一个需要数字的字符串。