使用Javascript的两个参数的非递归函数

时间:2015-10-05 23:22:57

标签: javascript

我正在尝试使用两个参数创建一个函数,该参数将计算字符在给定字符串中重复的次数。我的代码如下,但它无法正常工作。另外,我试图使它成为一个非递归函数。任何人都可以帮我吗?

function count(char,word) {
  var a,b;
  a= char
  b= word
  c= b.indexof(a)
  return c
}

count('a','apple')

7 个答案:

答案 0 :(得分:5)

要计算另一个字符串中出现的字符串,可以使用前者作为分隔符split后者,然后使用length计算返回数组的项目。

function count(char, word) {
  return word.split(char).length - 1;
}

答案 1 :(得分:4)

如果您的问题的意思是"单词中出现了多少个给定字符"那么有几种可能性。你可以循环调用.indexOf(),你可以让正则表达式找到所有的匹配,或者你可以手动迭代字符串比较。

如果您的问题意味着不同,请澄清问题。

以下是一些可能性:



function count(char, word) {
        var cntr = 0;
        var pos = 0;
        while ((pos = word.indexOf(char, pos)) !== -1) {
            ++cntr;
            ++pos;
        }
        return cntr;
    
    }

    var cnt = count('a','apple');
    document.write(cnt + "<br>");

    cnt = count('p','apple');
    document.write(cnt);
&#13;
&#13;
&#13;

或者,如果您的角色不是特殊的正则表达式字符,则可以使用正则表达式:

&#13;
&#13;
     function count(char, word) {
         var cnt =  word.match(new RegExp(char, "g"));
         return cnt ? cnt.length: 0;
     }

     var cnt = count('p', 'apple');
     document.write(cnt);
&#13;
&#13;
&#13;

或者,您可以遍历字符串并手动计算:

&#13;
&#13;
function count(char, word) {
    var cnt = 0;
    for (var i = 0; i < word.length; i++) {
        if (word.charAt(i) === char) {
            ++cnt;
        }
    }
    return cnt;
}

var cnt = count('p', 'apple');
document.write(cnt);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

这是一个非常简单的循环,它遍历单词,计算 ch 的实例。

function count(ch,word) {
  var i,count = 0;
  for(i = 0; i < word.length; i++) {
    if (word[i] === ch) count++;
  }
  return count;
}

console.log(count('p','apple'));

答案 3 :(得分:0)

你需要循环:

&#13;
&#13;
function count(c, word) {
  var i = 0;
  var arr = word.split(''); //break into array
  var a;
  while (arr.length) { //until array runs out of letters
    a = arr.pop(); // pull out one by one
    if (a === c) // got match
      i++;
  }
  return i;
}

alert(count('a', 'apple'));
&#13;
&#13;
&#13;

答案 4 :(得分:0)

最简单的方法可能只是循环输入。像这样:

function count(char,word) {
  var count = 0;
  for(var i = 0; i < word.length; i++)
  {
    if(word.charAt(i) === char)
      count++;
  }
  return count;
}

答案 5 :(得分:0)

以下是使用正则表达式执行此操作的方法:

function countLetter(letter,word) {
  var regexp = New RegExp(letter, 'g') //searches word for letter
  var arr = word.match(regexp);        //finds the letter within the word,
  return arr == null ? 0 : arr.length;
}                                      //sticks that letter into arr for each time it
                                       //appears in the word

console.log(countLetter('a','apple a a a '));
//arr = ['a', 'a', 'a', 'a'], arr.length = 4
console.log(countLetter('p','apples'));
//arr = ['p','p'] arr.length = 2

希望这有帮助!

答案 6 :(得分:0)

我会使用累加器函数来简单计算出现次数

function count(char,word) {
    return [].reduce.call(word,function(p,c){
        return p += char == c ? 1 : 0;
    },0);
}

但是,这只适用于总数。为了统计&#34;连续&#34;是非常不同的,需要跟踪重复

function count(char,word) {
    var total = 0;
    var max = 0;
    [].reduce.call(word.substr(1,word.length),function(p,c){
        if(p == c && c == char){ total++ }else{
            if( total > max ) max = total;
            total = 0;
        }
        return c;
    },word[0]);
    return max > 0 ? max + 1 : 0;
}