【问题标题】:d3.randomInt is not a functiond3.randomInt 不是函数
【发布时间】:2020-04-03 18:01:56
【问题描述】:

请不要仅仅因为它只是在谈论随机函数而关闭这个问题。

你好,

我有一个关于 d3.randomInt(); 的虚拟问题

d3.randomInt() 的输出是一个函数而不是一个值。 因此,要获得 0,10 之间的随机数字, 我需要做的是(我猜)

var x = d3.randomInt(0,10)();

但它说 d3.randomInt 不是函数。 所以我尝试了

var x = d3.randomInt(0,10) 

只是以防万一,他们都没有工作。 我没有看到 d3 的发行说明说 randomint 不再可用。 所以我确信有一种方法可以获取这些值。

提前谢谢你。

【问题讨论】:

  • 什么是 d3?是图书馆吗?
  • 你是如何加载 d3 的?
  • 我的意思是,如果我加载 d3,并使用您编写的第一个代码,它就可以工作。所以在加载库时可能会出错。请注意,我自己不知道 d3,但只是阅读文档和测试,你正在做的事情应该可以工作(第一个例子,var x = d3.randomInt(0,10)();)。
  • 我不太了解 d3,无法准确告诉您原因(可能是模块化的,或者错误的版本?),但如果您使用例如<script src="https://d3js.org/d3-random.v2.min.js"></script>(d3-random 的独立版本),它会工作。出于某种原因,在您包含的库中,d3.randomIntundefined,不存在。您可能需要阅读更多内容,了解您究竟包含了什么,以及它包含哪些功能。

标签: javascript d3.js data-visualization


【解决方案1】:

d3.randomInt 是 d3-random 模块版本 2 的一部分。由于主 D3 包 版本 5 仍使用该模块的版本 1,因此在加载包时该方法尚不可用。引入该方法是为了解决问题 randomInt([min = 0, ]max) #26,并将成为即将发布的主捆绑包 version 6 的一部分。

在撰写本文时,尚未公开发布主捆绑包第 6 版的预发布版本。尽管如此,要让它发挥作用,还是有几种选择:

  1. 创建您自己的 custom bundle,其中包含 d3-random 模块 v2。
  2. 加载单独的模块而不是整个包,包括 d3-random v2。
  3. 可能最简单且侵入性最小的方法可能是通过将缺失方法d3.randomInt()few lines 添加到d3 对象来扩展D3 v5。请查看以下 sn-p(加载 D3 v5.7.0)以获取工作演示。

d3.randomInt = d3.randomInt || (function sourceRandomInt(source) {
  function randomInt(min, max) {
    if (arguments.length < 2) max = min, min = 0;
    min = Math.floor(min);
    max = Math.floor(max) - min;
    return function() {
      return Math.floor(source() * max + min);
    };
  }

  randomInt.source = sourceRandomInt;

  return randomInt;
})(Math.random);

const random = d3.randomInt(5, 10);
console.log(random());
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"&gt;&lt;/script&gt;

【讨论】:

    猜你喜欢
    • 2014-08-09
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    相关资源
    最近更新 更多