简体   繁体   中英

Reusing simple Javascript Function

I'm new to JS and would like to know how to refactor this simple code so that I can pass in strings to count the number of "e" in a string.

function countE() {
  var count = 0;
  var str = "eee";
  var charLength = str.length;

  for (i =0; i <= charLength; i++){
      if(str.charAt(i) == "e"){
          count++;
      }
  }
   console.log(count);
}

I would like to execute this function where I can do something like this:

countE('excellent elephants');

which would log 5.

function countE(str) {
  if(typeof(str)==='undefined') str = 'eee';
  var count = 0;
  var charLength = str.length;

  for (i =0; i <= charLength; i++){
      if(str.charAt(i) == "e"){
          count++;
      }
  }
  console.log(count);
}

If you want to make your function body shorter, you can do the following:

function countE(str) { 
    return str.match(/e/g).length; 
}

And even more sophisticated:

function count(what) {
    return function(str) {
        return str.match(new RegExp(what, 'g')).length;
    };
}

// now you can do the this
var countE = count('e');
var resultE = countE('excellent elephants');

var countL = count('l');
var resultL = countL('excellent elephants');

If I understand your comment correctly, you want to do something like this:

function countE(inString) {
  var count = 0;
  var str = inString ? inString : "eee";
  var charLength = str.length;

  for (i =0; i <= charLength; i++){
      if(str.charAt(i) == "e"){
          count++;
      }
  }
   console.log(count);
}

You can also use a regular expression

function countE(str) {
   var count = str.match(/e/g).length;
   console.log(count);
}

or

function countE(str) {
   console.log(str.match(/e/g).length);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM