【问题标题】:Simple Javascript: Running a function over an array简单的 Javascript:在数组上运行函数
【发布时间】:2018-12-15 22:28:34
【问题描述】:

我正在尝试创建一个顶点数组,然后在该数组上运行“rect”函数以显示任意数量的矩形。现在,我有:

var vertices = new Array();

function setup() {
    createCanvas(600, 600);
    ...
    iter(width/2 - c/2, height/2 - c/2, c);
    var i;
    for (i = 0; i < vertices.length; i++) {
        fill(200);
        rect(vertices[i]);
    }
}

然后:

function iter(x, y, len) {
    r_1 = random(0, 1);

    if (r_1 < 0.5){
        vertices.push(x, y - len*0.5, len*0.5, len*0.5);
    }
}

我已经看到很多关于使用 map 或 foreach 在数组上运行函数的信息,但我不知道为什么这不起作用(特别是,使用 for 循环在数组上运行函数)。我显然对所有这些东西都很陌生!非常感谢您解释我似乎误解的内容。

谢谢

【问题讨论】:

  • 您的预期输出究竟是什么?
  • 显示由数组“顶点”内的数据描述的矩形的画布

标签: javascript arrays


【解决方案1】:

当你这样做时

vertices.push(x,y-len*0.5,len*0.5,len*0.5)

您正在使用 四个 参数调用 push,因此 四个 项被推送到数组中。因为你稍后用verticies[i] 调用rect,听起来verticies 的每个项目都应该是某种数据容器 - 一个数组或一个对象,否则每个顶点的点将被分开多个指标。例如,如果您要使用数组:

function iter(x, y, len) {
  r_1 = random(0, 1);
  if (r_1 < 0.5){
    vertices.push([x, y - len*0.5, len*0.5, len*0.5]);
  }
}

然后将vertex 数组中的每个数组展开rect 参数列表中:

function setup() {
  createCanvas(600, 600);
  // ...
  iter(width/2 - c/2, height/2 - c/2, c);
  var i;
  for (i = 0; i < vertices.length; i++) {
    fill(200);
    rect(...vertices[i]);
  }
}

这假设 rect 是一个接受 4 个参数的函数。 (您也可以更改 rect 使其接受单个数组作为参数,并避免使用扩展语法,如果您愿意)

您也可以考虑使用数组文字而不是 new Array - 调用数组构造函数是 rarely a good idea

var vertices = [];

【讨论】:

  • 我应该看到的。非常感谢!
猜你喜欢
  • 2011-12-04
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-30
相关资源
最近更新 更多