2011-11-05 82 views
0

我的程序当前循环访问一个数组,并统计所有模式中出现模式的次数。提取模式计数并将它们转储到数组

例如:如果我要在提示搜索“”我将结束:

0,1,2,3,4 

但我真的想在与

4,1 

落得作为在阵列1中出现4次,在阵列2中出现一次。

这是模式出现的次数在阵列中。

有关如何实现此目的的任何建议?

非常感谢提前!

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

var search = prompt('Search?'); 

function count(web, pattern) 
{ 
    if (pattern) 
    { 
     var num = 0; 
     var result = []; 
     for (i = 0; i < web.length; i++) 
     { 
      var current = web[i]; 
      var index = current.indexOf(pattern); 
      while (index >= 0) 
      { 
       result[result.length] = num++; 
       index = current.indexOf(pattern, index + 1); 
      } 
     } 
     return result; 
    } 
    else 
    { 
     return ("Nothing entered!"); 
    } 
} 
alert(count(web, search)); 
+0

我完全失去了你的问题。你最初在哪里搜索“at”?你为什么最终得到0,1,2,3,4?并且你有一个模式列表(或者我认为)[“猫胖子垫子”,“那个谁”]以及你在寻找什么?你能说一点吗? – Ajai

+0

我想返回循环模式的计数并在数组中返回它。 – methuselah

+0

对不起,我无法让你。你能举一些例子吗? “at”的例子似乎并不完整。 – Ajai

回答

0
var web = ["cat fat hat mat", "that the who"]; 

var search = prompt('Search?'); 

function count(web, pattern) 
{ 
    if (pattern) 
    { 
     var num = 0; 
     var result = []; 
     for (i = 0; i < web.length; i++) 
     { 
      var current = web[i]; 
      var index = 0; 
      do{ 
       result[i] = num++; 
       index = current.indexOf(pattern, index + 1); 

      }while (index >= 0) 
      num = 0; 
     } 
     return result; 
    } 
    else 
    { 
     return ("Nothing entered!"); 
    } 
} 
alert(count(web, search)); 

这工作太

var web = ["cat fat hat mat", "th the who"]; 

var answer = prompt('Search?'); 
var search = new RegExp(answer, "g"); 

function count(web, pattern) 
{ 
    var result = []; 
    for(var i=0; i< web.length; i++){ 
     var matches = web[i].match(search) || []; 
     result[i] = matches.length; 
    } 

    return result.join(","); 
} 
alert(count(web, search)); 
+0

这是正则表达式函数,它发现该表达式在字符串中出现了多少次,并返回这些出现的数组 –

0
var s = prompt('Search?'); 
var web = ["cat fat hat mat", "that the who"]; 
function count(search,arr){ 
var reg = new RegExp(search,'g'); 
var matches = []; 
for(var i=0; i<arr.length; i++){ 
    matches.push(arr[i].match(reg) ? arr[i].match(reg).length : 0); 
} 
return matches; 
} 

然后,就这样称呼它:

count(s,web); 

,它将返回[4,1]

这会将任何数组作为第二个参数。

Demo

0
  • 使用.match代替.indexOf,那么你会得到的 比赛直接
  • 不要忘了数在顶部声明你i变种
  • 认沽验证,这是更易于理解

改写:

var web = ["cat fat hat mat", "that the who"] 
    , search = prompt('Search?') 

function count(web, pattern){ 
    if (!pattern){ 
     return "Nothing entered!" 
    } 

    var result = [] 
     , exp = new RegExp(pattern, "g") 

    for(var i = 0; i < web.length; i++){ 
     var matches = web[i].match(exp) 
     result.push(matches ? matches.length : 0) 
    } 
    return result 
} 

alert(count(web, search)) 

最重要的:避免块之前的换行符{

此:

return 
{ 
    x: 1 
} 

相当于

return; 
{ 
    x: 1 
}; 

就是return undefined

相关问题