我在 newEntry.x 部分遇到“未捕获的类型错误:无法读取未定义的属性‘x’”。我不确定为什么它不会读取 for 循环中的对象,因为在控制台中,它似乎可以识别它们的值。
我正在编写一个函数,该函数返回带有相邻对象中点的扩展数组。它会执行一定次数的迭代,因此会出现嵌套的 for 循环。我不知道该怎么做,因为我尝试修改 for 循环和拼接,但没有成功。
function newList(iterations) {
for (let i = 0; i < iterations; i += 1) {
let concordiaLogo = [
{ x: 12.5, y: -100 },
{ x: 12.5, y: -112.5 },
{ x: 12.5, y: -125 },
{ x: 68.75, y: -68.75 },
{ x: 125, y: -12.5 },
{ x: 112.5, y: -12.5 },
{ x: 100, y: -12.5 },
{ x: 100, y: 0 },
{ x: 100, y: 12.5 },
{ x: 112.5, y: 12.5 },
{ x: 125, y: 12.5 },
{ x: 68.75, y: 68.75 },
{ x: 12.5, y: 125 },
{ x: 12.5, y: 112.5 },
{ x: 12.5, y: 100 },
{ x: 0, y: 100 },
{ x: -12.5, y: 100 },
{ x: -12.5, y: 112.5 },
{ x: -12.5, y: 125 },
{ x: -68.75, y: 68.75 },
{ x: -125, y: 12.5 },
{ x: -112.5, y: 12.5 },
{ x: -100, y: 12.5 },
{ x: -100, y: 0 },
{ x: -100, y: -12.5 },
{ x: -112.5, y: -12.5},
{ x: -125, y: -12.5 },
{ x: -68.75, y: -68.75 },
{ x: -12.5, y: -125 },
{ x: -12.5, y: -112.5 },
{ x: -12.5, y: -100 },
{ x: 0, y: -100 }
]
for (let i = 0; i < (concordiaLogo.length-1) * 2; i += 2) {
let newEntry = { x: 0, y: 0 };
newEntry.x = (concordiaLogo[i].x + concordiaLogo[i+1].x)/2;
newEntry.y = (concordiaLogo[i].y + concordiaLogo[i+1].y)/2;
concordiaLogo.splice(i + 1, 0, newEntry);
}
}
return concordiaLogo;
}
输入为 3 时,我期望得到一个 32*2**3 的数组,但它仅返回“未捕获的类型错误:无法读取未定义的属性 'x'。”
最佳答案
看起来您正在尝试迭代一个比现有数组更长的数组,因此您正在尝试在未定义的数组索引上设置 x
。
这里,迭代尝试遍历(array.length - 1) * 2
,这几乎是数组长度的两倍:
for (let i = 0; i < (concordiaLogo.length-1) * 2; i += 2) {
let newEntry = { x: 0, y: 0 };
newEntry.x = (concordiaLogo[i].x + concordiaLogo[i+1].x)/2;
newEntry.y = (concordiaLogo[i].y + concordiaLogo[i+1].y)/2;
concordiaLogo.splice(i + 1, 0, newEntry);
}
当您遇到大于数组长度的索引时,concordiaLoco[i]
未定义,因此您无法访问其上的x
。
关于javascript - JavaScript 中的数组错误 : Uncaught TypeError: Cannot read property 'x' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56517395/