javascript - 递归函数无法读取对象属性
问题描述
我做了一个函数,将一个数组变成一个列表,如下所示:
function arrayToList(array) {
var result = null;
for (var i = array.length; i >= 0; i--) {
result = {
value: array[i],
rest: result
}
}
return result
}
console.log(arrayToList([10, 20]))
然后我尝试创建一个递归函数,它接受一个列表和一个数字并返回列表中给定位置的元素
这是第一次尝试:
function arrayToList(array) {
var result = null;
for (var i = array.length; i >= 0; i--) {
result = {
value: array[i],
rest: result
}
}
return result
}
function nthRecur(list, index) {
var counter = 0
if (counter === index) {
return list.value
} else {
counter++
list = list.rest
return nthRecur(list, index)
}
}
console.log(nthRecur(arrayToList([10, 20, 30]), 1))
第二次尝试:
function arrayToList(array) {
var result = null;
for (var i = array.length; i >= 0; i--) {
result = {
value: array[i],
rest: result
}
}
return result
}
function nthRecur(list, index) {
var counter = 0
if (counter === index) {
return list.value
} else {
list = list.rest
return nthRecur(list, index - 1)
}
}
console.log(nthRecur(arrayToList([10, 20, 30]), 1))
它刚刚奏效。我不知道为什么。有人可以解释吗?
解决方案
您可以通过直接使用索引来缩短它。
function arrayToList(array) {
var result = null,
i = array.length;
while (i--) {
result = { value: array[i], rest: result };
}
return result;
}
function nthRecur(list, index) {
return index
? nthRecur(list.rest, index - 1)
: list.value;
}
var list = arrayToList([10, 20, 30]);
console.log(list);
console.log(nthRecur(list, 1));
推荐阅读
- python - 如何为 pyttsx3 python 添加自己的 tts 声音
- android - kotlin.Unit 不能转换为 java.util.List。用于 getFilter 上的自定义适配器
- blockchain - 您如何为您的运行时编写系统测试?
- google-bigquery - 在 BigQuery 上使用以下查询时出现 TIMESTAMP 错误
- python - 为 anaconda 安装 cot-reports 模块
- html - Angular:以HTML显示上传文件的文件名
- c++ - 查找检测到的 blob opencv 的颜色
- r - 按位置加条件过滤器访问列
- python - 如何在 json 参数中传递多个“标题”值
- google-cloud-platform - Terraform Bigquery 创建表替换表而不是编辑