循环遍历数组以检查模式

时间:2011-11-04 16:00:25

标签: javascript

我正在尝试遍历数组以检查特定模式,但之后不再输出。不知道我做错了什么!我将不胜感激任何帮助!

我正在测试模式或帽子。

sample = ["cat fat hat mat", "that the who"]
searchTerm = prompt("Testing?");

function count(sample, searchTerm) 
{

    for (i=0;i<sample.length;i++)
    {
    if (sample[i].indexOf(searchTerm) == -1) 
    {
        return 0;
    }
    return count(sample.substring(sample.indexOf(searchTerm) + searchTerm.length), searchTerm) + 1;
    }
}

alert(count(sample, searchTerm));

重新编码

search = ["cat fat hat mat", "that the who"];

var pattern = prompt('Search?'); 

function count(sample, searchTerm) 
{
    var count, i;
    count = 0;
    for (i=0; i < sample.length; i++)
    {
        if (sample[i].indexOf(searchTerm) !== -1) 
        {
            count++;
        }
    }
    return count;
}

count(search, pattern);

我已经重做了一切,但仍然没有输出。

2 个答案:

答案 0 :(得分:2)

你不需要在这里使用递归,只要在搜索词匹配的情况下计算,就迭代遍历数组。

function count(sample, searchTerm) 
{
    var count, i;
    count = 0;
    for (i=0; i < sample.length; i++)
    {
        if (sample[i].indexOf(searchTerm) !== -1) 
        {
            count++;
        }
    }
    return count;
}

答案 1 :(得分:2)

此代码存在一些问题。最直接的一个是您在substring而不是array上拨打string

return count(sample.substring ...

可能你想说

return count(sample[i].substring ...

第二个问题是你需要将逻辑分开一点。您需要将其划分为计算单词中出现次数和迭代数组的部分。今天它们交织在一起并导致奇怪的行为,因为你最终将非数组传递给期望数组的地方

function count(sample, searchTerm) {
  var num = 0;
  for (i=0;i<sample.length;i++) {
    var current = sample[i];
    var index = current.indexOf(searchTerm);
    while (index >= 0) {
      num++;
      index = current.indexOf(searchTerm, index + 1);
    }
  }
  return num;
}

工作小提琴:http://jsfiddle.net/wrNbL/