Javascript中的数组错误:未捕获的TypeError:无法读取未定义的属性“x”

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

我遇到了未捕获的TypeError:无法读取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,但它只返回未捕获的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 您的测试解析为i 这通过对照预期长度检查数组长度来解决问题。不确定如何得到32*2**3,结果将数组长度增加数组长度-1:

函数newListiterations{ 让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} ] 对于设i=0;i