DC.JS 如何处理具有不同数量属性的对象
DC.JS How to handle objects with different amount of properties
假设我有 2 个对象,每个对象都具有相同的属性,但一个有一个额外的 属性 middleName,另一个没有。
我应该如何处理 DC.js?
var objects = [{
name: "De Smet",
firstName: "Jasper",
adress: "Borsbeke",
},{
name: "De Backer",
firstName: "Dieter",
middleName: "middleName",
adress: "Borsbeke"
},{
name: "De Bondtr",
firstName: "Simon",
middleName: "OtherMiddleName",
adress: "Denderleeuw"
}
]
想要的行为是过滤掉没有 属性 的对象。像这样:
这是一个fiddle:
https://jsfiddle.net/mj92shru/41/
似乎将 属性 中间名添加到第一个对象并为其分配它找到的下一个中间名
将 属性 添加到第一个对象并添加占位符值(如“none”)有效,但它并没有真正产生所需的行为。
我知道我可以过滤掉中间名设置为“none”的对象,但在我编写的实际应用程序中这会很困难
我还发现添加没有 属性 最后一个对象会导致它崩溃。
事实上,为您的维度或组键使用未定义的字段可以 crash crossfilter 因为它不会验证其数据。 NaN、null 和 undefined 没有 well-defined 排序操作。
看到值被折叠到另一个容器中很奇怪,但我怀疑它是相同的未定义行为,而不是您可以依赖的东西。
如果您有可能未定义的字段,您应该始终将它们设置为默认值,即使您不想要该值:
middleNameDimension = j.dimension(d => d.middleName || 'foo'),
我认为您确实想要过滤您的数据,但不是在删除这些行并且不影响其他图表的交叉过滤意义上。相反,它应该从组中删除而不影响任何其他内容。
您可以为此使用“假组”,one in the FAQ 非常适合您的问题:
function remove_bins(source_group) { // (source_group, bins...}
var bins = Array.prototype.slice.call(arguments, 1);
return {
all:function () {
return source_group.all().filter(function(d) {
return bins.indexOf(d.key) === -1;
});
}
};
}
像这样应用它:
.group(remove_bins(middleNameGroup, 'foo'))
注意这一点,因为饼图隐含地加起来为 100%,而在这种情况下它只加起来为 66%。这可能会让用户感到困惑,具体取决于它的使用方式。
假设我有 2 个对象,每个对象都具有相同的属性,但一个有一个额外的 属性 middleName,另一个没有。 我应该如何处理 DC.js?
var objects = [{
name: "De Smet",
firstName: "Jasper",
adress: "Borsbeke",
},{
name: "De Backer",
firstName: "Dieter",
middleName: "middleName",
adress: "Borsbeke"
},{
name: "De Bondtr",
firstName: "Simon",
middleName: "OtherMiddleName",
adress: "Denderleeuw"
}
]
想要的行为是过滤掉没有 属性 的对象。像这样:
这是一个fiddle: https://jsfiddle.net/mj92shru/41/
似乎将 属性 中间名添加到第一个对象并为其分配它找到的下一个中间名
将 属性 添加到第一个对象并添加占位符值(如“none”)有效,但它并没有真正产生所需的行为。
我知道我可以过滤掉中间名设置为“none”的对象,但在我编写的实际应用程序中这会很困难
我还发现添加没有 属性 最后一个对象会导致它崩溃。
事实上,为您的维度或组键使用未定义的字段可以 crash crossfilter 因为它不会验证其数据。 NaN、null 和 undefined 没有 well-defined 排序操作。
看到值被折叠到另一个容器中很奇怪,但我怀疑它是相同的未定义行为,而不是您可以依赖的东西。
如果您有可能未定义的字段,您应该始终将它们设置为默认值,即使您不想要该值:
middleNameDimension = j.dimension(d => d.middleName || 'foo'),
我认为您确实想要过滤您的数据,但不是在删除这些行并且不影响其他图表的交叉过滤意义上。相反,它应该从组中删除而不影响任何其他内容。
您可以为此使用“假组”,one in the FAQ 非常适合您的问题:
function remove_bins(source_group) { // (source_group, bins...}
var bins = Array.prototype.slice.call(arguments, 1);
return {
all:function () {
return source_group.all().filter(function(d) {
return bins.indexOf(d.key) === -1;
});
}
};
}
像这样应用它:
.group(remove_bins(middleNameGroup, 'foo'))
注意这一点,因为饼图隐含地加起来为 100%,而在这种情况下它只加起来为 66%。这可能会让用户感到困惑,具体取决于它的使用方式。