Generator로 findIndexAll 구현

  • 문자열에서 찾고자 하는 대상의 모든 인덱스를 반환하는 Generator입니다.
  • javascript 기본 API에서 findIndex, findLastIndex가 있지만 최초 발견만 캐치한다는 한계점이 있었습니다.
  • 이를 해결하기 위해서는, 별도의 변수를 배치하여 해결하는 방법이 있습니다.
  • 그 변수가 완벽한 모듈에 패키징되도록 만들고 싶어서, Generator 를 사용해봤습니다.
  • 코루틴이 진행되면서 실행 컨텍스트가 계속 보존되기 때문에, 원하는 로직을 달성할 수가 있었습니다.
function* findIndexAll(str: string, searchElement: string) {
  let foundIndex = -1

  do {
    foundIndex = str.indexOf(searchElement, foundIndex + 1)

    if (foundIndex !== -1) {
      yield foundIndex
    }
  } while (foundIndex > -1)
}

[...findIndexAll('/admin/careers/codes', '/')]