javascript - 不同形状的交叉过滤数据
问题描述
我刚刚开始使用交叉过滤器。我对数据的经验很少。
我的数据如下所示:
const data = [
{_id: 001, a: 10, b: 11, c: 12},
{_id: 002, a: 11, c: 13},
{_id: 003, b: 12, c: 14},
{_id: 004, f: 102 },
{_id: 005, e:100, f:101, g: 102}
];
如您所见,并非每个对象都具有相同或公共的键。我得到的值不正确
dimension.top(), dimension.bottom()
例如:
const by_a = cf.dimension(function(d){return d.a};
const max_a = by_a.top(1)[0];
// Should be max_a = { _id: 002, a: 11, c: 13}
// Instead returns wrong object,
const by_f = cf.dimension(function(d){return d.f};
const min_f = by_f.bottom(1)[0];
// Should be min_f = { _id: 004, e:100, f:101, g: 102}
// Wrong object again.
我阅读了Crossfilter Gotchas但无法理解是否有任何适用于此,或者这种情况是否有解决方案。我也没有遇到类似的问题。我希望能够运行基本的交叉过滤查询。任何帮助深表感谢。谢谢。
解决方案
是的,这正是问题之一。如果您尝试读取 JavaScript 中的字段但它不存在,则默认值为undefined
.
然后,如果您将其与一个数字进行比较,它将强制为NaN
.
并且NaN
总是比较假,这搞砸了排序算法。
如果你像这样定义你的关键功能,你应该得到想要的(或至少可预测的)行为:
const by_a = cf.dimension(function(d){return d.a || 0; };
或者,如果您希望它们始终位于底部,即使存在负数:
const by_a = cf.dimension(function(d){return d.a || -Infinity; };
我在“自然排序”问题中添加了一个示例。
推荐阅读
- r - Non-standard evaluation with fitting a distribution to truncated data
- postgresql - postgresql 动态查询
- laravel - 查询日期时间除分钟和秒外都相等的模型 (Laravel Eloquent)
- lua - 动态(基于 prev protofield 值) Protofield valuestring based
- python - TensorFlow:在 session.run() 中访问更新的变量值
- amazon-cloudformation - Cloudformation - ECRImageURI 未能满足约束
- flutter - APT:错误:找不到属性 android:usesPermissionFlags
- python - 调整 Facebook-Prophet 模型以更准确地考虑月内季节性
- node.js - 在sequelize中使用外键删除多个表中的记录
- android - Flutter 中的反向列表