2012-12-15 39 views
4

我有一個字符串字符串分割和計數出現的次數,也

var stringIHave = "Java$$Java$$jQuery$$Java$$jQuery$$Java$$Java$$Java$$Hibernate$$Java$$Java$$Spring$$Instagram$$jQuery$$jQuery$$"; 

如何獲得每個條目,發生我得到的出現的次數的計數,是從Java等JSON = 8等..

+0

參見http://stackoverflow.com/questions/4009756/how-to-count-string-occurrence-in-string – WebStakker

回答

4

我建議如下:

function stringCount(haystack, needle) { 
    if (!needle || !haystack) { 
     return false; 
    } 
    else { 
     var words = haystack.split(needle), 
      count = {}; 
     for (var i = 0, len = words.length; i < len; i++) { 
      if (count.hasOwnProperty(words[i])) { 
       count[words[i]] = parseInt(count[words[i]], 10) + 1; 
      } 
      else { 
       count[words[i]] = 1; 
      } 
     } 
     return count; 
    } 
} 

console.log(stringCount("Java$$Java$$jQuery$$Java$$jQuery$$Java$$Java$$Java$$Hibernate$$Java$$Java$$Spring$$Instagram$$jQuery$$jQuery$$", '$$')); 
​ 

JS Fiddle demo

參考文獻:

6

首先,你需要你的srting拆分數組:

var keywordsArr = stringIHave.split('$$'); 

,那麼你需要有一個對象,例如存儲計數:

var occur = {}; 

,然後就創建簡單的for循環計算所有事件:

for(var i = 0; i < keywordsArr.length; i++) { 
    occur[ keywordsArr[ i ] ] = (occur[ keywordsArr[ i ] ] || 0) + 1; 
} 

現在你的對象occur將有名稱爲鍵和算作值。

查看jsFiddle demo

另外,作爲您在您的字符串的結尾$$你也許需要最後一個項目從keywordsArr刪除所以只是做後split函數調用:

keywordsArr.pop(); 

demo沒有最後一個元素。

所以最終代碼會像:

var stringIHave = "Java$$Java$$jQuery$$Java$$jQuery$$Java$$Java$$Java$$Hibernate$$Java$$Java$$Spring$$Instagram$$jQuery$$jQuery$$", 
    keywordsArr = stringIHave.split('$$'), 
    occur = {}; 

keywordsArr.pop(); 

for(var i = 0; i < keywordsArr.length; i++) { 
    occur[ keywordsArr[ i ] ] = (occur[ keywordsArr[ i ] ] || 0) + 1; 
} 

for(var key in occur) { 
    document.write(key + ' - ' + occur[key] + '<br/>');   
} ​ 
+0

這是唯一的答案,幫助我在過去6小時沮喪之後得到點數或重複。我有一串必須連接在一起的字符串,然後使用你的邏輯能夠找出完整字符串中的重複單詞。確定它可能是太多的開銷,但我現在只是輕鬆得到一個解決方案。 – Sid

1

將字符串拆分爲一個數組,並將數組放入一個對象中來處理對象中的重複項並將其作爲對象中的鍵/值對出現,請參閱小提琴!

var stringIHave = "Java$$Java$$jQuery$$Java$$jQuery$$Java$$Java$$Java$$Hibernate$$Java$$Java$$Spring$$Instagram$$jQuery$$jQuery$$", 
    s = stringIHave.split('$$'); 
    obj = {}; 

for (var i=s.length; i--;) { 
    obj[s[i]] = (s[i] in obj) ? obj[s[i]]+1 : 1; 
} 

// obj.Java == 8 

FIDDLE

2

這不是完全清楚什麼是最終目標。下面創建一個從字符串對象,看起來像

對象創建:

{ 
"Java": 8, 
"jQuery": 4, 
"Hibernate": 1, 
"Spring": 1, 
"Instagram": 1 
} 

JS:

var str = 'Java$$Java$$jQuery$$Java$$jQuery$$Java$$Java$$Java$$Hibernate$$Java$$Java$$Spring$$Instagram$$jQuery$$jQuery$$'; 
var arr = str.split('$$') 
var obj = {}; 

for (i = 0; i < arr.length; i++) { 
    if (arr[i] != '') { 
     if (!obj[arr[i]]) { 
      obj[arr[i]] = 0; 
     } 
     obj[arr[i]]++; 

    } 
} 

您可以遍歷所有的對象來獲取所有的值或者幹​​脆查找一個值

var jQueryOccurences= obj['jQuery']; 

DEMO:http://jsfiddle.net/25hBV/1/

1

如果你想簡短而親切:

// variable declarations 
var arParts = stringIHave.match(/\w+/g), 
    result = {}, 
    i = 0, 
    item; 

// Copy the array to result object  
while (item = arParts[i++]) result[item] = (result[item] || 0) + 1; 

demo