D3 平分线不适用于对象数组
d3 bisector not working with array of objects
我有一个对象数组
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
.如果我使用对象的"键"而不是访问器函数中的值,则平分线将失败。有人可以阐明为什么会发生这种情况吗?
您需要进行两项调整才能使其正常工作:
-
若要使用键进行比较,必须显式访问它们。给定你的对象数组,这可以通过
d3.keys(d)[0]
来完成,从而比较第一个和唯一的键。如果您想对键进行数字比较,这将+d3.keys(d)[0]
. -
因为您将回调指定为
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>
相关文章:
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 在Javascript中转换对象数组
- 在JavaScript中通过索引从对象数组中获取值
- Backbone虹吸以获取对象数组
- 如何在DataTables 2.1中迭代对象数组
- Javascript-根据赋值顺序,按键合并对象数组
- 将事件附加到对象/数组
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript在数组中获取对象数组中键的所有不同值
- 在对象数组中查找多个值的d3范围
- Undercore.js获取对象数组中键对象的值
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 如何通过json对象数组为嵌套对象赋值
- 如何循环通过2个对象数组并通过匹配id进行合并
- 为对象数组创建列表项
- 如何使用javascript合并两个对象数组
- JSON到对象数组,并向每个对象添加项
- JavaScript:从对象数组中获取唯一值及其计数
- 按不同项目对对象数组进行排序