javascript - 创建属性并使用数组元素对其进行初始化时出现类型错误
问题描述
我正在用 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 中,如果一个变量已被声明,但尚未被赋值,则会自动赋值为 undefined 。因此,如果您尝试访问此类变量的值,则会抛出 Uncaught TypeError cannot set property of undefined 。
我不确定是否undefined
指的是list.value
or arra[n]
,但据我所知(JS 很少)该语句是合法地创建和初始化对象的value
属性list
,所以问题应该是array[n]
.
Butn
是一个从0
到的整数array.lenght - 1
,所以array[n]
不能是未定义的。
请解释一下它是如何工作的。
解决方案
这里的关键是问题不在第一次迭代中出现,而是在第二次迭代中出现。
你的电话arrayToList(list, array, 0)
很好。但是,在该函数内部,有一个对arrayToList(list.rest, array, n+1)
. list.rest
不是什么。
老实说,我不确定在这种情况下您期望做什么。目前尚不清楚您的预期输入/输出应该是什么。我认为您可能有兴趣查看这些函数,它们可以帮助您处理整个数组:
Array.map()
使您能够处理数组中的每一项,并返回一个新数组。Array.reduce()
获取整个数组并允许缩减为单个值。(似乎最接近你的要求......减少到一个对象。)
推荐阅读
- android - 将文档文件与存储访问框架一起使用
- ios - AsyncDisplayKit:适合短文本的大小
- tensorflow - 如何将主线程中 tf.loadFrozenModel 加载的模型传输到 webworker
- c# - 如何使 Xamarin Forms 应用程序自动更新?
- jenkins-pipeline - 无法通过 Jenkinsfile 使用 rake 执行(查找)获取命令
- .net - 如何修复 Unity3D 中的“缺少组装参考错误”
- ssl - 安装让我们在vesta cp中加密SSL
- json-ld - 如何在 JSON-LD 上下文中定义必需的属性
- c# - 如何使用 C# 和 WPF 自动更新列表?
- python-3.x - 在 numpy ndarray 的共轭上应用 numpy fft 时出现“TypeError:需要浮点数”错误