Javascript中的数组错误:未捕获的TypeError:无法读取未定义的属性“x”
我遇到了未捕获的TypeError:无法读取newEntry.x部分中未定义的属性“x”。我不确定它为什么不读取for循环中的对象,因为在控制台中,它似乎可以识别它们的值 我正在编写一个函数,它返回一个扩展数组,其中包含相邻对象的中点。它会在一定数量的迭代中这样做,因此嵌套for循环。我不知道该怎么办,因为我尝试过修改for循环和拼接,但没有成功Javascript中的数组错误:未捕获的TypeError:无法读取未定义的属性“x”,javascript,arrays,for-loop,Javascript,Arrays,For Loop,我遇到了未捕获的TypeError:无法读取newEntry.x部分中未定义的属性“x”。我不确定它为什么不读取for循环中的对象,因为在控制台中,它似乎可以识别它们的值 我正在编写一个函数,它返回一个扩展数组,其中包含相邻对象的中点。它会在一定数量的迭代中这样做,因此嵌套for循环。我不知道该怎么办,因为我尝试过修改for循环和拼接,但没有成功 function newList(iterations) { for (let i = 0; i < iterations; i += 1
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,但它只返回未捕获的TypeError:无法读取未定义的属性“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);
}
当你点击一个大于数组长度的索引时,concordiaLogo[i]是未定义的,因此你不能访问它上的x。由于边界检查不正确,你将离开数组的末尾:i