如何解决创建属性并使用数组元素对其进行初始化时出现类型错误
我正在用 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,n+1);
}
const array = [1,2,3];
let list = {};
arrayToList(list,0);
console.log(list);
这是错误:
list.value = array[n];
^
TypeError: Cannot set property 'value' of undefined
我在网上找到了以下定义:
在 JavaScript 中,如果一个变量已被声明,但尚未被声明 分配了一个值,自动分配了值 undefined 。 因此,如果您尝试访问此类变量的值,它将 throw Uncaught TypeError 不能设置 undefined 的属性。
我不确定 undefined
是指 list.value
还是 arra[n]
,但据我所知(很少有 JS)该语句合法地创建和初始化 {{ value
对象的 1}} 属性,所以问题应该是 list
。
但是 array[n]
是一个从 n
到 0
的整数,所以 array.lenght - 1
不能是未定义的。
请解释它是如何工作的。
解决方法
这里的关键是问题不是出现在第一次迭代中,而是出现在第二次迭代中。
您拨打 arrayToList(list,array,0)
没问题。但是,在该函数内部,存在对 arrayToList(list.rest,n+1)
的递归调用。 list.rest
什么都不是。
老实说,我不太确定在这种情况下您希望做什么。目前尚不清楚您预期的输入/输出应该是什么。我想您可能有兴趣查看这些函数,它们可以帮助您处理整个数组:
-
Array.map()
使您能够处理数组中的每一项,返回一个新数组。 -
Array.reduce()
获取整个数组并允许缩减为单个值。 (似乎最接近您的要求……减少到单个对象。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。