为什么我会收到“未捕获的类型错误:无法读取未定义的属性(读取‘序列’)”?
2022-02-19
880
const rndInt = Math.floor(Math.random() * 50);
const arr = [];
const input = document.getElementById('answer').value;
function displaySeq() {
var i = 0;
while (arr.length < 21) {
arr[i] = {
sequence: [],
answer,
guess: []
};
i++;
for (j=0; j < 7; j++) {
arr[i].sequence[0] = rndInt;
arr[i].sequence.push(rndInt + j)
}
}
console.log(arr);
}
我知道这个错误意味着变量没有值,但我不确定该怎么做才能解决。
另一个不相关的问题是,我的目标是每次迭代时,每个数组的第一个元素都是一个新的随机整数。现在每个数组都是相同的随机整数。有办法解决这个问题吗?
2个回答
当
arr[0]
为空时,您无法访问它。因此,首先,您必须将其推送到数组,然后调用
arr[0]
。
此外,您正在增加
i
,然后将其推送到数组中。因此,最初,您在定义
arr[0]
之前访问
arr[1]
。
请尝试此方法:
function displaySeq() {
var i = 0;
while (arr.length < 21) {
arr.push({
sequence: [],
answer,
guess: []
});
for (j=0; j < 7; j++) {
arr[i].sequence[0] = rndInt;
arr[i].sequence.push(rndInt + j)
}
i++;
}
console.log(arr);
}
Muhammed Jaseem
2022-02-19
观察:
在创建数组对象并尝试访问
i
索引处的数组对象后,您正在增加
i
。
简单地说,您尝试访问
arr[i+1]
,因为此时
arr
中只有一个元素。
解决方案:
在完成
for
循环后增加索引
i++
。
演示:
const rndInt = Math.floor(Math.random() * 50);
const arr = [];
function displaySeq() {
var i = 0;
while (arr.length < 21) {
arr[i] = {
sequence: [],
answer: [],
guess: []
};
for (j = 0; j < 7; j++) {
arr[i].sequence[0] = rndInt;
arr[i].sequence.push(rndInt + j)
}
i++;
}
console.log(arr);
}
displaySeq();
Rohìt Jíndal
2022-02-25