【问题标题】:I have an issue with adding a function to an array. (JavaScript)我在向数组添加函数时遇到问题。 (JavaScript)
【发布时间】:2021-07-08 04:46:12
【问题描述】:

这是将函数(画布绘图)添加到 sameTree 数组的代码

let TreesI = 5;
    let sameTree = [];
    let randomValueX = mathR(-20, 20);
    let randomValueY = mathR(-20, 20);
    for (let i = 0; i < TreesI; i++) {
      randomValueX = mathR(-20, 20);
      randomValueY = mathR(-20, 20);
      sameTree[TreesI] = Tree7(randomValueX, randomValueY)
    }

但它什么也没做,

console.log 输出给出了这个

[5: 未定义] (6) = $2

这是 Tree7 的示例

function Tree7(startWidth, startHeight) {

  ctx.save();
  let treeObj = {
    translateValues: {
      startWidth: startWidth,
      startHeight: startHeight,
      endWidth: -startWidth,
      endHeight: -startHeight
    },
    scaleR: mathR(0.8, 1)
  }

  ctx.translate(treeObj.translateValues.startWidth, treeObj.translateValues.startHeight);
ctx.scale(treeObj.scaleR,treeObj.scaleR);

//ctx.strokeStyle = 'rgb(0, 100, 1)';
ctx.strokeStyle = 'black';
ctx.globalAlpha = 0.5;
ctx.lineWidth = 0.2;
var reduce = 2;
  //Tree drawing sample under
  ctx.beginPath();
  ctx.moveTo(0,0);
  ctx.lineTo(mathR(0,10),0);
  ctx.stroke();
  // Tree drawing sample above

  ctx.translate(treeObj.translateValues.endWidth, treeObj.translateValues.endHeight);
  ctx.restore();
}

现在得到一些答案后,我意识到我需要停止更新随机值ctx.lineTo(mathR(0,10),0);。我目前的代码只保留坐标。请帮忙。

【问题讨论】:

  • sameTree[i] 而不是 sameTree[TreesI]?
  • 如果你发布Tree7函数的样子就好了。
  • 我看不到来自 Tree7 函数的任何返回值,该函数领先于 undefined
  • 如果您希望函数调用的结果存储在数组中,您的函数应该返回它们。由于您的函数当前没有返回语句,因此完成后它总是“返回未定义”。这就是为什么您在数组中看到未定义的原因
  • 您不能只返回多个值,例如return (value1, value2, ...)。一个函数只能返回一个值。因此,您可以将您希望返回的所有值放入一个对象或数组中,然后返回那个。

标签: javascript arrays function for-loop indexing


【解决方案1】:

尝试这样存储随机生成的位置值并绘制。

let TreesI = 5;
let sameTree = [];
let randomValueX = mathR(-20, 20);
let randomValueY = mathR(-20, 20);
for (let i = 0; i < TreesI; i++) {
   randomValueX = mathR(-20, 20);
   randomValueY = mathR(-20, 20);
   sameTree[i] = {"x":randomValueX, "y":randomValueY};
   Tree7(sameTree[i].x, sameTree[i].y);
}

当你想在此之后使用预生成的值进行绘制时,

for (let i = 0; i < TreesI; i++) {
   Tree7(sameTree[i].x, sameTree[i].y);
}

【讨论】:

  • 按照我的要求工作,但现在我意识到我只提供了代码来显示坐标位置 x 和 y。我在 Tree7 函数中有随机生成代码,有什么办法可以让它在我的动画函数中多次调用它时给出与第一次相同的值?
【解决方案2】:

如果你写的是 sameTree[i] 而不是 sameTree[TreesI] 它会在 Tree7(randomValueX, randomValueY) 返回一个函数时起作用。

【讨论】:

  • 所以我这样做了,但从技术上讲它有效,但现在它显示“[undefined, undefined, undefined, undefined, undefined] (5) = $2"
  • 函数值怎么会在这个数组里面?
猜你喜欢
  • 1970-01-01
  • 2019-12-03
  • 1970-01-01
  • 2014-06-17
  • 1970-01-01
  • 2019-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多