我在Eloquent Javascript中查看了与此特定练习相关的所有解决方案,但没有任何解决方案可以解决我的问题。
你可以看到arrayToList function here
我的问题是如何通过从开始到结束而不是从结束到开始的循环来编写程序。
以下是我的解决方案:
function arrayToList(arr) {
var entry = { value: null, rest: null}
for (var i = 0; i < arr.length; i++) {
if(entry.value == null)
entry.value = arr[i]
else{
entry.rest = arrayToList([arr[i]])
}
}
return entry
}
console.log(arrayToList([10,20]));
一切都很顺利。
Input - console.log(arrayToList([10, 20]));
output - { value: 10, rest: { value: 20, rest: null } }
但下面的一个给出的问题
Input - console.log(arrayToList([10, 20, 30]));
Actual output - { value: 10, rest: { value: 30, rest: null } }
Expected output - { value: 10,
rest: { value: 20, rest: { value: 30, rest: null } } }
我不知道如何递归调用,即使数组中有超过2个元素,它仍然能够创建列表结构
5条答案
按热度按时间lzfw57am1#
你需要在递归调用中传递数组的其余部分,例如。
可以缩短为:
你没有说如何处理稀疏数组,上面的要求是没有缺失元素的连续数组。对于稀疏数组,你最终会在结果中得到很多
value: undefined
。bis0qfac2#
我相信这种方法是对this answer的改进,因为一个空数组正确地返回一个具有属性
value
和rest
的对象,数组中的假值不会导致提前退出,并且数组不会通过传递给函数而发生变化。它使用简单的自顶向下递归来生成嵌套列表。6ovsh4lw3#
基于你的空数组的链接,函数返回null,似乎只有未命名的数组将在这个练习中传递,所以我不关心原始数组(将在函数执行后空)。
f5emj3cl4#
这个问题不需要使用递归
如果你需要使用递归算法,下面是我推荐的解决方案。
使用索引参数,这将是更有效的比其他答案使用递归算法。
未创建新阵列,也未更改原始阵列。
如果你不喜欢这个额外的参数,可以将它 Package 在另一个函数中。可能看起来像这样:
iqih9akk5#