안녕하세요, 개발자 여러분!
오늘은 indexOf()
메소드를 처음부터 구현해 보았습니다. 지금까지 다음을 찾았습니다.
<code class="language-javascript">function myIndexOf(string, target, start = 0) { let l = target.length; // 调整起始索引,如果它是负数 if (start < 0) { start = string.length + start; } // 确保起始索引在字符串长度范围内 if (start < 0) { start = 0; } else if (start >= string.length) { return -1; // 目标索引超出字符串范围 } // 循环遍历字符串 for (let i = start; i <= string.length - l; i++) { if (string.substring(i, i + l) === target) { return i; // 找到目标子串 } } return -1; // 未找到目标子串 }</code>
코드 설명:
indexOf()
메소드는 세 가지 매개변수를 허용합니다:
string
: 검색할 문자열입니다. target
: 찾을 하위 문자열입니다. start
: 검색이 시작되는 인덱스입니다(기본값 0). 첫 번째 시도:
처음 아이디어는 간단했습니다. 문자열을 반복하면서 string[i] === target
를 찾으면 i
을 반환하는 것이었습니다. 루프 끝에서 일치하는 항목이 없으면 -1이 반환됩니다. 코드는 다음과 같습니다.
<code class="language-javascript">// 此方法仅适用于单个字符的目标</code>
그러나 이 방법은 문자별로 비교하기 때문에 target
이 단일 문자인 경우에만 작동합니다.
두 번째 시도:
그러다가 target
가 한 문자보다 길면 하위 문자열을 비교해야 한다는 것을 깨달았습니다. 저는 substr()
과 길이가 같은 하위 문자열을 비교하기 위해 target
메서드를 사용합니다. 문자열에 비교할 문자가 충분히 남아 있으면 루프가 중지되도록 조정됩니다.
<code class="language-javascript">// 此方法处理多字符目标,但未处理start参数</code>
세 번째 시도:
다음으로 음수일 수 있는 start
매개변수를 처리해야 합니다. 내장 indexOf()
메소드는 start
가 음수일 때 string.length start
부터 검색을 시작합니다. 예를 들어 문자열 길이가 10이고 start
가 -4인 경우 검색은 인덱스 6(예: 10 - 4)에서 시작됩니다.
이 문제를 해결하기 위해 음수 start
값을 처리하도록 코드를 업데이트했습니다.
<code class="language-javascript">function myIndexOf(string, target, start = 0) { let l = target.length; if (start < 0) { start = string.length + start; } // ... (其余代码与第二次尝试相同) }</code>
최종 버전:
호기심에서 문자열 길이보다 큰 start
값을 처리하고 싶었기 때문에 start
가 문자열 길이를 초과하면 계속해서 "줄바꿈"하도록 함수를 수정하기로 결정했습니다. 끈. 이렇게 하면 함수는 래핑 후에 적절한 인덱스에서 계속 검색합니다. 최종 솔루션은 다음 공식을 사용하여 시작 인덱스를 조정합니다.
<code class="language-javascript">start = (string.length + start) % string.length;</code>
작동 방식:
start % string.length
는 start
가 -string.length
에서 string.length
범위에 있는지 확인합니다. string.length
을 추가했습니다. start
의 값이 래핑되어 유효한 인덱스 범위 내에 속하는지 확인합니다. 다음에는 선형 검색 대신 이진 검색을 사용하고 싶은데 어떻게 생각하시나요?
위 내용은 string.indexOf() 내부의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!