2013-10-04 3 views
1

저는 숙제를 다하고 있습니다. 여기에 내 문제와 시도한 해결책이있다. 문자열의 각 occourence 위치를 표시하는 방법은 무엇입니까?

는 "tx_val"문자 문자열에 "E"의 각각의 선두로부터의 위치를 ​​표시

내 예상 결과

tx_val="the quick brown fox jumped over the lazy dogs back"; 

    os=' '; //output string 
    eloc=' '; 

    for (i=0; i<tx_val.lastIndexOf('e');i++) 
    { 
    if(tx_val.indexOf('e')!= -1) 
     { 

      eloc=tx_val.indexOf('e') ; 
      os=os+eloc; 
      i++; 
     } 

     }   
: 2 24 29 34

내 결과 : 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

나는 누군가가 내 논리가 왜 작동하지 않는지를 설명하고 나를 올바르게 지적하는 대답을 찾는 것이 아니다. 방향.

+5

사용 같이 IndexOf의 두 번째 인수를 떠날거야. –

+2

'indexOf ('e')'는 항상 * e *의 첫 번째 인덱스를 제공합니다. 검색을 시작할 위치를 지정하려면 [두 번째 인수] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf)를 사용하십시오. 그렇게 말하면서, 나는 당신이 그것을 어떻게하는지이 문제를 해결하지 않을 것이다. –

+2

왜 루프 안에 'i'가 증가합니까? – j08691

답변

2

더 나은 솔루션이 같은 수 있습니다 : 당신이 개인 문자의 배열로 문자열을 분할하려고하면

var lastIndex = tx_val.indexOf('e'); 
while (lastIndex > -1) { 
    os += lastIndex + " "; 
    lastIndex = tx_val.indexOf('e',lastIndex + 1); 
} 
+0

나를 이길. :) – talemyn

+0

완벽하게 작동합니다. 나 한테 묻지 않았 으면 좋겠어. while 루프를 어떻게 사용하도록 결정 했습니까? 수년간의 경험을 통해 배운 것입니까? –

+0

기술적으로'for' 루프는'while' 루프로 재 작성 될 수 있고 그 반대도 마찬가지입니다. 'while' 루프는 어떤 조건이 여전히 참일 때 루프를 반복하기 때문에 우리가 여기서하려고하는 것에 더 자연스럽게 들어 맞습니다. (여전히 'e'가 일치합니다.) 당신은'for (var lastIndex = tx_val.indexOf ('e'); lastIndex> -1; lastIndex = tx.val.indexOf ('e', ​​lastIndex + 1))'와 동일해야합니다. 그러나 개인적으로 각 루프에서 단순한 더하기 또는 빼기 이상의 역할을하는 for 루프를 개인적으로 좋아하지 않습니다. YMMV. –

4

동일한 문자열에서 단일 인수와 함께 호출 될 경우 indexOf()은 매번 동일한 인덱스를 계속 반환합니다.

indexOf()의 첫 번째 인수는 일치시킬 부분 문자열입니다. 두 번째 선택적 인수는 검색 양식을 시작할 색인입니다. 이 인수를 전달하지 않으면 결과가 반복마다 변경되지 않습니다.

루프가 i 반복자가 lastIndexOf() 값과 같아야한다고 가정하는 것은 잘못되었습니다. 문자열이 e 문자로만 만들어진 경우가 아니면 일치 횟수가 일치하는 인덱스의 값과 확실히 같지 않으므로 루프에서 많은 중복 반복을 실행하게됩니다. 즉, 색인 24에 일치 항목이 하나만있는 경우 루프는 아무 이유없이 23 번 반복됩니다.

+0

답/의견을 보내 주셔서 감사합니다. 나는 코드를 수정하여 indexOf()의 2, 3, 4 등 인수를 받는다. 중복 루프 반복에 대한 요점이 있습니다. for 루프의 두 번째 인수를 정의하여 원하는 횟수 만 반복하는 방법을 결정하려면 어떻게해야합니까? –

+0

문제 없습니다. @MattBurland는이 경우 올바른 해결책입니다. – Boaz

0

무엇, 당신이 그것을 분석하고 다른 (출력) 배열에 일치하는 인덱스를 저장?

1

다른 솔루션은 이미 제공되었습니다 (indexOf의 두 번째 매개 변수).

난 그냥이 라인 여기

tx_val.replace(/e/g, function(str, i) {os = os + ' ' + i}); 
관련 문제