문제

배열이 있습니다.

var locations = ['Afghanistan','Albania','Algeria','New York'];

그리고 문자열 :

var string = 'I love Afghanistan New York Afghanistan Andorra Andorra Algeria New York';

배열의 각 키워드가 문자열에 나타나는 횟수를 계산하고 싶지만 가장 좋은 방법을 찾을 수는 없습니다.

도움이 되었습니까?

해결책

내 버전은 다음과 같습니다.

function countItems(a, s) {
    var x, i, output = {};
    for (x = 0; x < a.length; x++) {
        i = 0;
        output[a[x]] = 0;
        while ((i = s.indexOf(a[x], i)) > -1) {
            output[a[x]]++;
            i++
        }
    }
    return output;
}

var result = countItems(locations, string);
// result['Albania'] === 0

시도해보십시오 여기.

다른 팁

이와 같은 것을 시도하십시오. 당신은 당신이하는 일을 수정할 수 있습니다 count - 다른 배열에 저장하고 표시 (이 스크립트가하는 일) 등을 표시하십시오.

var locations = ['Afghanistan','Albania','Algeria','New York'];
var str = 'I love Afghanistan New York Afghanistan Andorra Andorra Algeria New York';


for(var i=0; i<locations.length; i++) {
    var pattern = new RegExp(locations[i], "g");
    var m = str.match(pattern);
    if (m != null)
    {
       var count = m.length; // the count
       alert("There are " + count + " occurrences of " + locations[i]);
    }
}
<script language="JavaScript">
var locations = ['Afghanistan','Albania','Algeria','New York'];

var string1 = 'I love Afghanistan New York Afghanistan Andorra Andorra Algeria New York';

for (var i=0;i<locations.length;i++) {
  nCount = string1.split(locations[i]).length-1;
  document.write(locations[i] + ' is found ' + nCount + ' times<br>');
}

</script>

이 코드는 인스턴스화됩니다 하나 RegExp 객체와 반전 루프를 사용합니다. 나는 이것이 물리학의 법칙을 어 기지 않고 갈 수있는만큼 빠르다고 확신합니다 :)

이것은 일어나는 일입니다 :

  1. 역방향 루프를 사용하여 정규 표현식 문자열을 구성하십시오
  2. 하나의 regexp 객체 만 새로운 것입니다 match() 문자열에
  3. 에 의해 반환 된 배열의 길이를 계산하십시오 match() 기능

구현은 다음과 같습니다.

var countries = ["Afganistan", "America", "Island"];
var sentence = "I love Afganistan, America.. And I love America some more";

function countOccurrences(a, s)
{
    var re = "",
        l = a.length,
        m;

    while (l)
    {
        l--;

        re += a[l];

        if (l > 0) re += "|";
    }

    m = s.match(new RegExp(re, "gi")) || [];

    return m.length;
}

참고 : 물론 기능 내에서 구성된 정규 표현식을 깨뜨리는 특수 문자에 대해 배열의 항목이 소독 될 것으로 기대하고 있습니다.

var occurrences = function countOccurrences(countries, sentence); // returns 3
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top