2012-12-15 4 views
4

내가 각 항목, 내가 얻을 발생의 발생 횟수의 카운트를 얻는 방법문자열 분할 및 발생 수를 계산하고 또한

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

는, 자바와 같은 JSON에서 인 문자열이 = 8 등 ... 당신이 배열에 srting을 분할하는 데 필요한 모든의

+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

첫 번째 예는 수를 저장하기위한

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

는 다음 객체가 필요합니다 :

루프가 모든 항목을 계산하는
var occur = {}; 

다음은 간단하게 만들 :

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

이제 객체 occur 키와 같은 이름을 가지고 값으로 계산됩니다.

jsFiddle demo을 참조하십시오.

또한 어쩌면 그래서 그냥 split 함수 호출 후에 할 keywordsArr에서 마지막 항목을 제거해야합니다 $$ 당신이 당신의 문자열의 끝에서이 같이

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

문자열을 배열로 분할하고 객체에 배열을 두는 것은 중복을 처리하고 객체에서 키/값 쌍으로 발생을 계산합니다 (fiddle 참조)!

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']; 

데모 : 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

관련 문제