_.indexOf(array, value, [fromIndex=0])

Получает индекс, по которому первое вхождение value находится в array, используя SameValueZero для сравнения на равенство. Если fromIndex отрицательное, оно используется как смещение от конца array.

Полную документацию по этому методу смотрите здесь.

Это последнее предложение было первым, что бросило меня в тупик во время тестирования. Моя первоначальная мысль заключалась в том, что они имели в виду что-то вроде операции по модулю, но когда я тестировал индексы за пределами длины массива, исходный _.indexOf вернул бы -1 (для входных данных, превышающих длину массива) или 0 (для отрицательных входных данных, меньших, чем длина массива). обратная длина массива). Истинный модуль будет продолжать цикл вокруг длины массива, т. е. начальный индекс -4 в массиве, длина которого равна 3, должен возвращать индекс 3, -5 должен возвращать 2, -6 должен возвращать 1 и т. д. on … скорее _.indexOf вернул 0 во всех этих случаях.

Я немного схитрил и перепроверил, как они справляются с этим, и в итоге скопировал их решение в свою реализацию.

Видите эту закомментированную строку, где я проверяю тип индекса? Я просто оставляю это, чтобы рассказать о NaN и о том, как меня расстроило осознание того, что его тип на самом деле является числом. Потребовалось много гугления, прежде чем я понял, почему мои тестовые примеры терпели неудачу. На самом деле, вот хорошая статья Киро Риска, которую я добавил в закладки по этому поводу.

Помимо этих проблем, этот метод был прост в реализации. Всегда приятно наблюдать за прохождением всех ваших тестовых случаев. Как всегда, вы можете увидеть их на GitHub здесь.