2011-11-05 84 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

相關問題