首页 > 解决方案 > d3.randomInt 不是函数

问题描述

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

你好,

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

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

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

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

var x = d3.randomInt(0,10) 

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

先感谢您。

标签: javascriptd3.jsdata-visualization

解决方案


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

在撰写本文时,还没有公开发布的主捆绑包第 6 版的预发布版本。尽管如此,为了让它工作,有几个选择:

  1. 创建您自己的包含 d3-random 模块 v2的自定义包。
  2. 加载单独的模块而不是整个包,包括 d3-random v2。
  3. 可能最简单且侵入性最小的方法可能是通过将缺少的方法的几行d3.randomInt()添加到d3对象来扩展 D3 v5。查看以下代码片段(加载 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());
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>


推荐阅读