json - DC.JS 如何处理具有不同数量属性的对象
问题描述
假设我有 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"
}
]
想要的行为是没有属性的对象被过滤掉。像这样:
这是一个小提琴: https ://jsfiddle.net/mj92shru/41/
似乎将属性中间名添加到第一个对象并为其分配找到的下一个中间名
将属性添加到第一个对象并添加像“none”这样的占位符值是可行的,但它并没有真正产生想要的行为。
我意识到我可以过滤掉中间名设置为“无”的对象,但这在我正在编写的实际应用程序中会很困难
我还发现最后添加没有属性的对象会导致它崩溃。
解决方案
事实上,为您的维度或组键使用未定义的字段可能会使交叉过滤器崩溃,因为它不会验证其数据。NaN、null 和 undefined 没有明确定义的排序操作。
看到折叠到另一个 bin 中的值很奇怪,但我怀疑这是相同的未定义行为,而不是您可以依赖的东西。
如果您有可能未定义的字段,则应始终默认它们,即使您不想要该值:
middleNameDimension = j.dimension(d => d.middleName || 'foo'),
我认为您确实想要过滤您的数据,但不是在交叉过滤器意义上,这些行被删除并且不影响其他图表。相反,它应该从组中删除而不影响其他任何内容。
您可以为此使用“假组”,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%。这可能会让用户感到困惑,具体取决于它的使用方式。
推荐阅读
- stack - 来自 netCDF 文件的堆栈变量
- amazon-web-services - 如何获取 Redshift 用户的时区?
- qt - qmake 安装集的成员是什么?
- python - 如何使用此方法(pd.DataFrame)创建三列,而不是两列?
- apache-spark - 使用 Conda Env 问题运行 PySpark
- javascript - 从 XHTTP 请求传递数据库内容
- c# - 您如何通过 ASP.net 核心中的 IEnumerable ViewModel 进行分页?
- video - 如何让Kdenlive播放完整片段?
- java - 如何在 vscode 中使用 php-cs-fixer 和用于 php 和 composer 的 docker 容器
- python - X 和 Y 刻度干扰网格和图例 - Matplotlib