Я новичок в использовании рекурсии, поэтому я просто хочу знать, хочу ли я узнать индекс элемента массива, используя рекурсию (Javascript). Это правильный путь, или есть лучший способ?

let arr = [1, 2, 3, 4]

function search(arr, item) {
    const searchIndex = (array, elem, index = 0) => {
        if (array.length === 0) return -1
        if (array[0] === elem) return index
        return searchIndex(array.slice(1), elem, ++index)
    }

    return searchIndex(arr, item)
}
console.log(search(arr, 4)) // output should be 3
-1
Md. Ehtisham Farooqui 21 Янв 2022 в 20:39
Да, он зовет себя, пока условия не скажут ему остановиться, мазел тов.
 – 
zer00ne
21 Янв 2022 в 20:46

3 ответа

Вы можете немного изменить аргументы и добавить индекс и передать полный массив.

function search(array, item, i = 0) {
    if (i >= array.length) return -1;
    if (array[i] === item) return i;
    return search(array, item, i + 1)
}

let arr = [1, 2, 3, 4];
console.log(search(arr, 4)) // 3
console.log(search(arr, 8)) // -1
console.log(search([], 4)) // -1
1
Nina Scholz 21 Янв 2022 в 20:45

Почему бы не использовать Array.prototype.indexOf()?

Подробнее см. здесь

Метод indexOf () возвращает первый индекс, по которому данный элемент может быть найден в массиве, или -1, если его нет.

let arr = [1, 2, 3, 4]
console.log(arr.indexOf(4))
0
James 21 Янв 2022 в 20:41
Я думаю, что OP хотел знать, действительно ли код был рекурсивным.
 – 
zer00ne
21 Янв 2022 в 20:44
@ zer00ne, я думаю, что OP спрашивает Is this the right way, or there is a better way? или, может быть, вы правы ??
 – 
James
21 Янв 2022 в 20:45
const arr = ['1', '2', '3','4']
  
  const index = arr.indexOf('4');
  console.log(index)
  
  //index is `3`

-1
Micro Kumar 21 Янв 2022 в 20:47