错误:value.pos [i]未定义

时间:2018-05-27 18:04:28

标签: javascript arrays

我有一个像这样的数组(这是其中之一):

T1 = [
{
    tipo:"m",
    pos: [
        [0,0]
    ]

    },{
    tipo:"b",
    pos: [
        [0,0.223,0.1,0.5,0.11,0.5]
    ]
    },
    {
    tipo:"m",
    pos: [
        [0,0]
    ]
    }
    ]

然后我验证了什么是类型,然后根据内容进行绘制。

function caminho(c, a) {
c.beginPath();
a.forEach(function(value, i) {
if (value.tipo === "m") {
  c.moveTo(value.pos[i][0], value.pos[i][1]);
  console.log(value.pos);
  } else if (value.tipo === "l") {
       value.pos.forEach(function(pos, j) {
          c.lineTo(pos[0], pos[1]);
    });

    }
    else if(value.tipo === "q") {
      value.pos.forEach(function(pos,j) {
          c.quadraticCurveTo(pos[0], pos[1], pos[2], pos[3]);
    });
}
    else if(value.tipo === "a") {
    value.pos.forEach(function(pos,j) {
        c.arc(pos[0],pos[1],pos[2],pos[3],pos[4]);
    });
}
   else if(value.tipo === "b") {
    value.pos.forEach(function(pos,j) {
        c.bezierCurveTo(pos[0],pos[1],pos[2],pos[3],pos[4],pos[5]);
    })
}
 });
  c.closePath();
  }

问题是因为我收到了这个错误,但如果我删除了最后一种类型的" m"从T1功能它工作正常。 我想用T1做的基本上是这样,但使用的结构是我用数组:

c2d.beginPath(); 
    c2d.moveTo(0, 0);
    c2d.bezierCurveTo(0,0.223,0.1,0.5,0.11,0.5);
    c2d.moveTo(0, 0);
c2d.closePath();

1 个答案:

答案 0 :(得分:0)

i变量显示数组中项的索引。所以它将是0,1,2,......

但是你的pos数组里面只有一个元素。所以从

中替换这个loc
c.moveTo(value.pos[i][0], value.pos[i][1]);

c.moveTo(value.pos[0][0], value.pos[0][1]);

这里的完整代码



function caminho(c, a) {
  c.beginPath();
  a.forEach(function(value, i) {
    if (value.tipo === "m") {
      c.moveTo(value.pos[0][0], value.pos[0][1]);
      console.log(value.pos);
    } else if (value.tipo === "l") {
      value.pos.forEach(function(pos, j) {
        c.lineTo(pos[0], pos[1]);
      });
    } else if (value.tipo === "q") {
      value.pos.forEach(function(pos, j) {
        c.quadraticCurveTo(pos[0], pos[1], pos[2], pos[3]);
      });
    } else if (value.tipo === "a") {
      value.pos.forEach(function(pos, j) {
        c.arc(pos[0], pos[1], pos[2], pos[3], pos[4]);
      });
    } else if (value.tipo === "b") {
      value.pos.forEach(function(pos, j) {
        c.bezierCurveTo(pos[0], pos[1], pos[2], pos[3], pos[4], pos[5]);
      });
    }
  });
  c.closePath();
}