gpt4 book ai didi

javascript - 使用 d3.nest 嵌套包含数组的数据

转载 作者:行者123 更新时间:2023-12-03 06:04:57 24 4
gpt4 key购买 nike

我正在使用 d3 制作一些漂亮的图表,所有的原始数据都是相同的。然而,这个原始数据包含数组。

var data = [
{name: "Alfred", age: "27", medication: [{name: "Aspirin", dose: "14", unit: "tablets"}]},
{name: "Brian", age: "62", medication: []},
{name: "Chris", age: "46", medication: [{name: "Bisoprolol", dose: "3", unit: "ml"}, {name: "Clotrimazol", dose: "2", unit: "mg"}]},
{name: "David", age: "68", medication: [{name: "Aspirin", dose: "4", unit: "tablets"}, {name: "Bisoprolol", dose: "1.5", unit: "ml"}, {name: "Clotrimazol", dose: "2", unit: "mg"}]}
]

现在显然,我可以轻松地按年龄或姓名等对它们进行分组。

当我想显示药物(按名称)时,问题就出现了,因为任何患者都可以拥有一种、没有或其中几种。因此,每个患者可以不属于任何组,也可以属于多个组。到目前为止,我看到了三种方法:

  1. 重复患者使用一种以上药物,每个副本使用不同的单一药物

这会造成冗余,而且我想从相同的数据中绘制一整套图表。嵌套的关键(为每个患者返回分组依据的值的函数)将从用户界面动态创建 - 因为它是 getter,而不是 setter,我需要弄清楚如何为每个副本重置药物, 也。根据原始数据的复杂性,复制可能也不是微不足道的。

  • 在关键功能中连接药物名称(使用唯一的分隔符),并在绘图时根据需要进行拆分和添加。
  • 每种出现的药物组合都会有自己的组,我需要计算包含特定药物的所有组的总和,以获得其频率的总和。这似乎是个坏主意。

  • 编写我自己的处理数组的嵌套函数。
  • 除非我也从头开始实现它,否则我将失去 d3 的汇总和排序功能。

    有更好的方法吗?

    最佳答案

    除了预处理您的数据(如您的 pt.1)之外,我没有看到更好的方法,以便键可以是药物名称,值可以是原始数据的记录。您不需要复制患者,您只需复制对他们的引用即可,这不会造成大量冗余(并节省内存)。您无需将 data 传递到图表函数中,而是只需传递 extractMedicates(data) 即可,这也并不是那么多余。

    function extractMedications(d)
    {
    var res = [];
    d.forEach(function(patient) {
    patient.medication.forEach(function(medication) {
    res.push({medication_name: medication.name, patient: patient});
    })
    })
    return res;
    }
    console.log(extractMedications(data))

    另一个优点是,在此解决方案中,您可以修改 data 数组中的患者姓名,这也将反射(reflect)在转换后的数组中(因为它包含对 data< 中对象的引用)/)

    然后您需要将此结构转发到 d3.nest 并执行您想要的任何操作。

    关于javascript - 使用 d3.nest 嵌套包含数组的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39592554/

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