【问题标题】:d3 bisector not working with array of objectsd3 bisector 不适用于对象数组
【发布时间】:2016-04-24 16:39:44
【问题描述】:

我有一个对象数组

var s = [{"4":0},{"5":0},{"8":0},{"14":0}];

还有一个d3.bisector()

var bd = d3.bisector(function(d,y){ return y;}).left;

这样称呼的时候

bd(s,5)

它输出0。如果我使用对象的“键”而不是访问器函数中的值,平分线会失败。有人能解释一下为什么会这样吗?

【问题讨论】:

  • 不是真的,问题是如果你使用对象“key”作为返回值,平分线会失败。否则,我知道它有效。

标签: javascript d3.js


【解决方案1】:

您需要进行两项调整才能使其正常工作:

  1. 要使用密钥进行比较,您必须显式访问它们。给定您的对象数组,这可以由d3.keys(d)[0] 完成,从而比较第一个也是唯一一个键。如果您想对密钥进行数字比较,则为+d3.keys(d)[0]

  2. 因为您将回调指定为function(d,y) {},即采用两个参数,所以该函数应该是一个返回布尔值的比较器。在您的情况下,最简单的方法可能是提供一个参数回调作为对象键的访问器。

以下代码应按预期工作

s = [{"4":0},{"5":0},{"8":0},{"14":0}];

var bd = d3.bisector(function(d) {
  return +d3.keys(d)[0];
}).left;

console.log(bd(s, 5));   // 1
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 2012-07-29
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多