gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:20:59 24 4
gpt4 key购买 nike

我刚开始使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com