d3平分线不使用对象数组

时间:2016-01-19 09:21:57

标签: javascript d3.js

我有一个对象数组

    System.out.println("-------- MySQL JDBC Connection Testing ------------");

    Connection dbConnection = null;

    try {
        Class.forName(DB_DRIVER);
    } catch (ClassNotFoundException e) {
        System.out.println(e.getMessage());
    }

    try {
        dbConnection = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
        return dbConnection;
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }

    return dbConnection;

}

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) 。如果我使用" key"对象的而不是访问器函数中的值。有人可以解释为什么会发生这种情况吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

  3. 以下代码应按预期工作

    
    
    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>
    &#13;
    &#13;
    &#13;