如何从dc.js / crossfilter / d3中的数组字段中选择元素,并将每个元素用作图表的单独数据点

How to select elements from array field in dc.js / crossfilter / d3 and use each of them as separate data point for chart?

本文关键字:元素 数据 单独 选择 js dc crossfilter d3 字段 数组      更新时间:2023-09-26

例如,JSON元素,其中"categories"字段是一个数组:

{"city": "San Francisco, CA", "business_id": "15", "name": "Parastructure", "date":  "2014", "founder_education": "Stanford", "categories": ["Big Data", "Big Data Analytics", "Data Visualization", "Enterprise Software"], "Amount": "500000000"}

使用dc.js,我如何选择数组中的每个元素并将其添加到图表可视化中?

var categories = ndx.dimension(function (d) {
     return d.categories; // this wouldn't work

});

var categoriesGroup = categories.group();

Crossfilter对于记录的平面数组效果最好。如果你不喜欢reduce函数创建映射的想法,就像上面的评论所建议的那样,你可以通过将记录的类别"相乘"来从数据中创建一个平面数组。

所以,像这样(使用下划线的克隆函数复制记录):

var product = [];
for(var r in records) {
    for(var i = 0; i < r.categories.length; ++i) {
        var r2 = _.clone(r);
        delete r2.categories;
        r2.category = r.categories[i];
        product.push(r2);
    }
}

(警告:未测试。)以前一条记录中有n个类别,现在有n条记录,每个类别一个。现在可以减少category

…当然,它可能会使您的其他计算变得混乱或无法工作(这里有一些提示),这就是为什么我首先建议使用另一个答案。不幸的是,交叉过滤器不是为处理多值字段而设计的。