2012-12-15 25 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