Count the number of occurrences of a character in a string in Javascript

后端 未结 30 2918
礼貌的吻别
礼貌的吻别 2020-11-22 02:33

I need to count the number of occurrences of a character in a string.

For example, suppose my string contains:

var mainStr = \"str1,str2,str3,str4\";         


        
30条回答
  •  别那么骄傲
    2020-11-22 03:02

    I just did a very quick and dirty test on repl.it using Node v7.4. For a single character, the standard for loop is quickest:

    Some code:

    // winner!
    function charCount1(s, c) {
        let count = 0;
        c = c.charAt(0); // we save some time here
        for(let i = 0; i < s.length; ++i) {
            if(c === s.charAt(i)) {
                ++count;
            }
        }
        return count;
    }
    
    function charCount2(s, c) {
        return (s.match(new RegExp(c[0], 'g')) || []).length;
    }
    
    function charCount3(s, c) {
        let count = 0;
        for(ch of s) {
            if(c === ch) {
                ++count;
            }
        }
        return count;
    }
    
    function perfIt() {
        const s = 'Hello, World!';
        const c = 'o';
    
        console.time('charCount1');
        for(let i = 0; i < 10000; i++) {
            charCount1(s, c);
        }
        console.timeEnd('charCount1');
        
        console.time('charCount2');
        for(let i = 0; i < 10000; i++) {
            charCount2(s, c);
        }
        console.timeEnd('charCount2');
        
        console.time('charCount3');
        for(let i = 0; i < 10000; i++) {
            charCount2(s, c);
        }
        console.timeEnd('charCount3');
    }
    

    Results from a few runs:

     perfIt()
    charCount1: 3.843ms
    charCount2: 11.614ms
    charCount3: 11.470ms
    => undefined
       perfIt()
    charCount1: 3.006ms
    charCount2: 8.193ms
    charCount3: 7.941ms
    => undefined
       perfIt()
    charCount1: 2.539ms
    charCount2: 7.496ms
    charCount3: 7.601ms
    => undefined
       perfIt()
    charCount1: 2.654ms
    charCount2: 7.540ms
    charCount3: 7.424ms
    => undefined
       perfIt()
    charCount1: 2.950ms
    charCount2: 9.445ms
    charCount3: 8.589ms
    

    Update 2020-Oct-24: Still the case with Node.js 12 (play with it yourself here)

提交回复
热议问题