Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果第二个参数为数值,则平分左函数不起作用_Javascript_D3.js - Fatal编程技术网

Javascript 如果第二个参数为数值,则平分左函数不起作用

Javascript 如果第二个参数为数值,则平分左函数不起作用,javascript,d3.js,Javascript,D3.js,在我正在实现的一个小例程中,我使用了d3.js的二分法左函数。 我使用的是最新版本(v5.9.2)。 如果我这样做,一切都很好: var dataArray = [10, 20, 50, 40, 30, 600]; d3.bisectLeft(dataArray, 30); //2 但如果我这样做,不会: var dataArray = [[10,1],[20,2],[50,5],[40,4],[30,3],[600,60]]; d3.bisectLeft(dataArray, 30); //

在我正在实现的一个小例程中,我使用了d3.js的二分法左函数。 我使用的是最新版本(v5.9.2)。 如果我这样做,一切都很好:

var dataArray = [10, 20, 50, 40, 30, 600];
d3.bisectLeft(dataArray, 30); //2
但如果我这样做,不会:

var dataArray = [[10,1],[20,2],[50,5],[40,4],[30,3],[600,60]];
d3.bisectLeft(dataArray, 30); //0 Bad!
然而,这很有效:

var dataArray = [[10,1],[20,2],[50,5],[40,4],[30,3],[600,60]];
d3.bisectLeft(dataArray, '30'); //2 Good!
这是故意的吗?我已经查看了源代码和文档,但我不明白为什么会发生这种情况。
一旦知道这个问题,在我的代码中很容易修复,但我仍然有疑问,我不知道我是否遗漏了什么。

这里的问题是你有一个数组。在这种情况下,您必须使用适当的访问器函数,以便D3可以知道要比较的值。根据这些文件,这种方法

使用指定的访问器或比较器函数返回新的平分线。此方法可用于对分对象数组,而不限于基本体的简单数组。(强调矿山)

在您的情况下,这将是:

const bisector = d3.bisector(function(d) { return d[0]; }).left;
如您所见,这将通过在每个内部数组中选取第一个数字,有效地将数组数组转换为单个数字数组,就像问题中的第一个片段一样

另外,请注意数组需要排序这一事实(否则人们永远不会理解为什么
2
在您的问题中是“好的”)

这是演示:

var数据数组=[
[10, 1],
[20, 2],
[50, 5],
[40, 4],
[30, 3],
[600, 60]
];
dataArray=dataArray.sort(函数(a,b){
返回a[0]-b[0];
});
常数平分线=d3。平分线(函数(d){
返回d[0];
}).左;
常数结果=平分线(数据数组,30);
console.log(结果)

比我快,回答得好。需要一个警告,说明您正在键入答案以节省时间。@AndrewReid谜团仍然存在:为什么以及如何使用该字符串作为平分线?你可能想调查这一点,并将其作为答案发布。这将修复它。非常感谢。