Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.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/4/string/5.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 JS:编写一个函数,返回多次出现的不区分大小写的字母字符和数字的计数_Javascript_String_Function_For Loop_Count - Fatal编程技术网

Javascript JS:编写一个函数,返回多次出现的不区分大小写的字母字符和数字的计数

Javascript JS:编写一个函数,返回多次出现的不区分大小写的字母字符和数字的计数,javascript,string,function,for-loop,count,Javascript,String,Function,For Loop,Count,我有以下问题:计算重复的数量 编写一个函数,返回输入字符串中多次出现的不区分大小写的字母字符和数字的计数。可以假定输入字符串仅包含字母数字字符,包括数字、大写字母和小写字母 范例 “abcde”->0(没有字符重复超过一次) “aabbcde”->2(#“a”和“b”) “aabbcdeB”->2(#“a”和“b”) “不可分割性”->(1#“i”) “不可分割性”->2(#“i”和“s”) “aa11”->2(#“a”和“1”) 我有下面的代码,看起来很有效,但我不太理解: functio

我有以下问题:计算重复的数量

编写一个函数,返回输入字符串中多次出现的不区分大小写的字母字符和数字的计数。可以假定输入字符串仅包含字母数字字符,包括数字、大写字母和小写字母

范例

  • “abcde”->0(没有字符重复超过一次)
  • “aabbcde”->2(#“a”和“b”)
  • “aabbcdeB”->2(#“a”和“b”)
  • “不可分割性”->(1#“i”)
  • “不可分割性”->2(#“i”和“s”)
  • “aa11”->2(#“a”和“1”)
我有下面的代码,看起来很有效,但我不太理解:

function countDuplicates(str) {
    var myObj = {},
        counter = 0;    
    for(var i = 0; i < str.length; i++){   

      if(!myObj[str[i]]){
          myObj[str[i]] = 1;
      } 
      else if(myObj[str[i]] < 2) {
          myObj[str[i]]+=1;
          counter++;
      }    
    }
    return counter;
}
函数重复计数(str){
var myObj={},
计数器=0;
对于(var i=0;i
是否可以逐行检查并快速解释代码的作用

  • 此代码将遍历字符串中的所有字符
  • 您正在创建一个空对象
    myObj
  • myObj
    添加与当前检查字符的值同名的属性,即
    myObj[str[i]]
    您可以将其分解为:
    str[i]
    等于
    g
    ,因此您将拥有
    myObject['g']

    然后将编号
    1
    分配给
    myObject['g']
    ,使对象现在看起来像:

    myObj:{ g:1 }

  • 检查字符串的下一个字符,现在该字符是例如
    c
    ,因此您正在执行与第3部分相同的操作,现在您的对象看起来像:

    myObj:{ g:1,c:1 }

  • 但是,如果您已经在
    myObj
    中添加了一个字符,那么会发生什么呢?这是在
    if(!myObj[str[i]]){…}
    中进行检查,所以这里发生的是,我们正在检查当前选中的字符是否已经添加到对象中。如果未添加,则添加值
    1
    ,如第3部分
    ,例如!myObj[str[i]
    与未定义的myObj['c']==相同(如果未定义,则将其添加到对象中)

    但是,如果已经添加了,我们将检查对象属性的值是否小于
    2
    (我们只想为指定的字符增加一次计数器),如果是,我们将增加
    计数器
    (是的,我们找到了重复项)

  • 返回计数器

  • 函数重复计数(文本){
    var nText=text.toLowerCase();//这会将每个字符更改为小写
    var myObj={};//声明一个空对象
    var计数器=0;
    对于(变量i=0;i
    任务是编写函数,而不是复制粘贴它。如果您不理解代码,请尝试调试它。是的,可以逐行检查并快速解释代码所做的工作。我认为代码将因以下特殊要求而失败:
    不区分大小写
    。作为一点帮助,当代码在字符串的字符上迭代时,它正在生成一个对象,其中
    是字符,
    是这些字符的频率。
    function duplicateCount(text) {
        var nText = text.toLowerCase(); //this changes every character to lower case 
        var myObj = {}; // Declaring an empty object
        var counter = 0;
        for (var i = 0; i < nText.length; i++) {
        // assigning character as property and giving value 1 
            if (!myObj[nText[i]]){
                myObj[nText[i]] = 1;
            }//checking if character already added
            else if (myObj[nText[i]] < 2) {
                myObj[nText[i]] += 1;
                counter++;
            }
        }
        return counter;
    }