Javascript d3平分线不适用于对象数组

Javascript d3平分线不适用于对象数组,javascript,d3.js,Javascript,D3.js,我有一个对象数组 var s = [{"4":0},{"5":0},{"8":0},{"14":0}]; 和一个d3.平分线(): 这样叫的时候 bd(s,5) 它输出0。如果使用对象的“键”而不是访问器函数中的值,平分线将失败。有人能解释一下为什么会发生这种情况吗?您需要进行两项调整才能使其正常工作: 要使用这些键进行比较,必须显式访问它们。给定对象数组,这可以通过比较第一个键和唯一一个键来完成。如果您想对键进行数字比较,则这将是+d3.keys(d)[0] 因为您将回调指定为函数(d,y

我有一个对象数组

var s = [{"4":0},{"5":0},{"8":0},{"14":0}];
和一个
d3.平分线()

这样叫的时候

bd(s,5)

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

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

  • 要使用这些键进行比较,必须显式访问它们。给定对象数组,这可以通过比较第一个键和唯一一个键来完成。如果您想对键进行数字比较,则这将是
    +d3.keys(d)[0]

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

  • 以下代码应按预期工作

    s=[{4:0},{5:0},{8:0},{14:0}];
    var bd=d3.平分线(函数(d){
    返回+d3.键(d)[0];
    }).左;
    console.log(bd(s,5));//1

    不太可能,问题是如果使用对象“key”作为返回值,平分线将失败。否则,我知道它是有效的。
    bd(s,5)