【问题标题】:random number generation and nested array in JavaScriptJavaScript 中的随机数生成和嵌套数组
【发布时间】:2017-09-29 01:04:17
【问题描述】:

我正在尝试生成随机数以使用 d3js 创建散点图。我是按以下方式做的:

//declare an array of arrays
var dataset = [
  []
];
var inner = [];

/*
    set the svg width and height
*/
var svgWidth = 500;
var svgHeight = 100;
var xCoord = 0;
var yCoord = 0;

for (var i = 0; i < 20; i++) {
  do {
    xCoord = Math.floor(Math.random() * svgWidth);
    yCoord = Math.floor(Math.random() * svgHeight);
  } while (xCoord <= 0 | yCoord <= 0);


  if (xCoord > 0 && yCoord > 0) {
    inner.push(xCoord);
    inner.push(yCoord);

    dataset.push(inner);
  }

  inner = [];
}

var svg = d3.select("body")
  .append("svg")
  .attr("width", svgWidth)
  .attr("height", svgHeight);


svg.selectAll("circle")
  .data(dataset)
  .enter()
  .append("circle")
  .attr("cx", function(d) {
    return d[0];
  })
  .attr("cy", function(d) {
    return d[1];
  })
  .attr("r", 5);
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"&gt;&lt;/script&gt;

外部数组应该只包含 20 个元素,我发现它创建了 21 个元素,而不是第一个元素只有半径值,没有圆心的坐标值。一些提示会很好理解这个问题。

【问题讨论】:

  • while( xCoord &lt;= 0 | yCoord &lt;= 0 )

标签: javascript arrays d3.js


【解决方案1】:

试试这个:

//declare an array of arrays
var dataset = [];
var inner = [];

/*
    set the svg width and height
*/
var svgWidth = 500;
var svgHeight = 100;
var xCoord = 0;
var yCoord = 0;

for (var i = 0; i < 20; i++) {
  do {
    xCoord = Math.floor(Math.random() * svgWidth);
    yCoord = Math.floor(Math.random() * svgHeight);
  } while (xCoord <= 0 | yCoord <= 0);


  if (xCoord > 0 && yCoord > 0) {
    inner.push(xCoord);
    inner.push(yCoord);

    dataset.push(inner);
  }

  inner = [];
}

var svg = d3.select("body")
  .append("svg")
  .attr("width", svgWidth)
  .attr("height", svgHeight);


svg.selectAll("circle")
  .data(dataset)
  .enter()
  .append("circle")
  .attr("cx", function(d) {
    return d[0];
  })
  .attr("cy", function(d) {
    return d[1];
  })
  .attr("r", 5);

【讨论】:

  • 虽然有点困惑,如何在 JavaScript 中声明嵌套数组。这本书 - “Web 的交互式可视化”提到嵌套的硬括号表示数组中的数组
【解决方案2】:

内部数组不是必须的,实际上是问题所在。

var dataset = [
  []
];

删除它。

var dataset = [];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 2016-01-26
    • 2014-04-25
    • 2015-05-28
    • 1970-01-01
    相关资源
    最近更新 更多