我正在用JavaScript编写我的第一个程序,其想法是创建一个函数,获取整数数组,并使用从数组元素中获取的属性值制作列表(数据结构)(不知道如何迭代地做到这一点)。
列表应该是这样的:
{
value: 1,
rest: {
value: 2,
rest: {
value: 3,
rest: null
}
}
}
我得到一个错误,我不完全理解。
程序如下:
function arrayToList(list, array, n)
{
list.value = array[n];
if( n < array.length - 1 ) arrayToList(list.rest, array, n+1);
}
const array = [1,2,3];
let list = {};
arrayToList(list, array, 0);
console.log(list);
错误如下:
list.value = array[n];
^
TypeError: Cannot set property 'value' of undefined
我在网上找到了以下定义:
在JavaScript中,如果一个变量已经被声明,但还没有被声明赋值时,是自动赋值的未定义值。因此,如果您试图访问这样的变量的值,它将throw Uncaught TypeError不能设置undefined的属性
我不确定undefined
是指list.value
还是arra[n]
,但据我所知(很少的JS)该语句是合法地创建和初始化list
对象的value
属性,所以问题应该是array[n]
。
但n
是一个整数范围从0
到array.lenght - 1
,所以array[n]
不能定义。
请给我解释一下它的工作原理。
这里的关键是问题不是在第一次迭代中出现的,而是在第二次迭代中出现的。
您呼叫arrayToList(list, array, 0)
是好的。但是,在该函数内部,有一个对arrayToList(list.rest, array, n+1)
的递归调用。list.rest
什么都不是。
老实说,我不太确定你在这种情况下想要做什么。您期望的输入/输出应该是什么并不清楚。我想你可能会对这些函数感兴趣,它们可以帮助你处理整个数组:
Array.map()
允许您处理数组中的每个项,返回一个新数组。Array.reduce()
取整个数组并允许缩减为单个值。(似乎最接近你的要求……减少到单个对象)