Итак, у меня есть следующая функция, которая преобразует массив в список и отлично работает:
function arrayToList (arr) {
var list = null
arr.reverse()
for (var i = 0; i < arr.length; i++) {
list = {value: arr[i], rest: list}
}
return list
}
Теперь я пытаюсь написать функцию, которая возвращает n-е значение списка
function nth (list, number) {
if (number !== 0) {
nth(list.rest, number - 1)
} else {
console.info(typeof list.value)
return list.value
}
}
если я запускаю nth (list, 0), он работает нормально, но когда я меняю индекс (число) на что-то другое (например, 1, 2 и т.д.) в функции console.info показывает, что тип list.value - Number, но какой он возвращается не определено P.S: я использую node.js версии 6.11.4 для запуска своего кода
list.rest содержит другой список, а также, если вы печатаете list.value, он показывает значение
Ах да, я это пропустил. Вы не вернетесь к рекурсии. См. Ответ ниже.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужен return и для промежуточных звонков.
return nth(list.rest, number - 1) //observe that return before nth
т.е.
function nth (list, number) {
if (number !== 0) {
return nth(list.rest, number - 1);
} else {
console.info(typeof list.value)
return list.value;
}
}
Демо
function arrayToList(arr) {
var list = null
arr.reverse()
for (var i = 0; i < arr.length; i++) {
list = {
value: arr[i],
rest: list
}
}
return list
}
function nth (list, number) {
if (number !== 0) {
return nth(list.rest, number - 1);
} else {
//console.info(typeof list.value)
return list.value;
}
}
var arr = [1,2,3,4,5,6];
var list = arrayToList(arr);
console.info(nth(list,2));Используйте это в своем условии if -
return nth(list.rest, number - 1)
Или просто используйте это в своем условии else вместо возврата значения -
console.info(list.value);
используйте его в соответствии с вашим вариантом использования.
Это потому, что вы передаете
list.restфункцииnth(list.rest, number - 1). В нем нет.value. Вы, вероятно, захотите передатьnth(list, number - 1).