javascript - 具有不同形状的交叉过滤数据

标签 javascript crossfilter

我刚开始使用 crossfilter。我对数据没有什么经验。

我的数据是这样的:

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 总是比较 false,这会搞砸排序算法。

如果你这样定义你的关键函数,你应该得到期望的(或至少可预测的)行为:

const by_a = cf.dimension(function(d){return d.a || 0; };

或者如果您希望它们始终位于底部,即使出现负数也是如此:

const by_a = cf.dimension(function(d){return d.a || -Infinity; };

我在“自然排序”陷阱中添加了一个示例。

关于javascript - 具有不同形状的交叉过滤数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51453750/

相关文章:

javascript - 只要您从/向 HTTPS 页面发送数据,数据就安全吗?我仍然可以在 chrome 的网络开发者工具中看到表单数据

javascript - 在滚动时缩小和更改背景导航栏

ajax - 在客户端使用 dc.js,在服务器端使用 crossfilter

javascript - 连接到 CrossFilter 的 D3 JS 布局树

javascript - 在 Discord 上设置应用程序命令权限时出现 403 错误

javascript - typescript |仅允许传递满足传递键类型的值

javascript - 去抖动功能单元测试

javascript - DC.js 条形图 x 轴标签未与条对齐

javascript - crossfilter.js,如何处理日期维度上的人为重复项

javascript - 如何排序以从 "crossfilter-reduce-find-number-of-uniques"中获取前 10 名