我使用的是crossfilter错误但无法找到哪里。
我有一个我正在过滤的数据集。当我提供排序功能按星期几对数据进行排序时,结果显示负值。
如果我跳过排序,一切正常。
数据看起来像这样
dataEg=[{"attr1": "A", "date":" Thu Apr 12 2018 00:00:00 GMT+0100 (BST)", "attr2": "a", "attr3": 25.11, "dayOfWeek": "Thu"},
{"attr1": "B", "date":" Sun Apr 01 2018 00:00:00 GMT+0100 (BST)", "attr2": "b", "attr3": 6.67, "dayOfWeek": "Sun"}];
我使用crossfilter按属性选择
var crossFilter = (function () {
var filter = {};
filter.ndx = crossfilter(dataEg);
filter.attr2Dim = filter.ndx.dimension(function (d) { return d.attr2; });
filter.dayOfWeekDim = filter.ndx.dimension(function (d) { return d.dayOfWeek; });
filter.attr1Dim = filter.ndx.dimension(function (d) { return d.attr1; });
filter.costPerDayOfWeek = filter.dayOfWeekDim.group().reduceSum(function (d) { return d.attr3; });
filter.costPerattr2 = filter.attr2Dim.group().reduceSum(function (d) { return d.attr3 });
filter.costPerattr1 = filter.attr1Dim.group().reduceSum(function (d) { return d.attr3 });
return filter;
})();
过滤某些atteribute
crossFilter.attr1Dim.filter(function (d) {
return d === "B";
});
除非我先使用此过滤器按日排序日期
,否则一切正常function DaySorter (keyLocator) {
if (keyLocator === undefined) {
keyLocator = function (item) {
return item;
};
}
return function (a, b) {
var order = {
"Mon": 0, "Tue": 1, "Wed": 2, "Thu": 3, "Fri": 4, "Sat": 5, "Sun": 6
};
var aVal = order[keyLocator(a)];
var bVal = order[keyLocator(b)];
var comp = 0;
if (aVal > bVal) {
comp = 1;
}
else if (aVal < bVal) {
comp = -1;
}
return comp;
};
}
然而,我没有看到我犯错的地方。过滤器似乎正常工作并遵循documentation。
可以找到最小的JSFiddle here。
答案 0 :(得分:0)
我正在对图表中的数据进行排序,以便按星期几的顺序显示。然而,这在某种程度上干扰了CrossFilter的内部。
在对图表进行排序之前对数据进行深层复制解决了问题(这里使用JQuery)。
data =[];
$.extend(true, data, dataOrg);