Javascript 如何使用多个相关数据集?

Javascript 如何使用多个相关数据集?,javascript,json,d3.js,Javascript,Json,D3.js,我有几个相关的json数据文件。在不透露太多专有数据的情况下,为了让它变得简单 假设一个json文件“business”描述企业,其特征是企业的名称、地址等,以及一个唯一的ID。这个数字有几十万 然后,另一个json文件“ratings”保存客户给出的业务评级1-5,由唯一的客户ID和业务ID键入。所有评级对应于“业务”中的业务(我希望如此)“收视率”是一个小得多的文件,事实上,我只使用了上万个收视率中的1000个 我有一些其他相关的文件,但我现在只限于这些 假设我做了一些d3评级图表,比如一个

我有几个相关的json数据文件。在不透露太多专有数据的情况下,为了让它变得简单

假设一个json文件
“business”
描述企业,其特征是企业的名称、地址等,以及一个唯一的ID。这个数字有几十万

然后,另一个json文件
“ratings”
保存客户给出的业务评级1-5,由唯一的客户ID和业务ID键入。所有评级对应于
“业务”
中的业务(我希望如此)<代码>“收视率”是一个小得多的文件,事实上,我只使用了上万个收视率中的1000个

我有一些其他相关的文件,但我现在只限于这些

假设我做了一些d3评级图表,比如一个条形图,其中每个垂直条代表一个业务,高度由他们的平均评级决定

我想这样做,例如,当您将鼠标悬停在一个条上时,您可以看到企业名称,为此,我必须从
“企业”
“评级”
中提取。我只看到过一个数据集的例子

我加载两个数据集,并将每个数据集分配给一个变量:

(通常我会进行错误检查,但为了简单起见,我会将其删除)

这两个数据集都显示在控制台中。我做酒吧,像这样:

var svg = d3.select("body")
    .append("svg")
    .attr("width", w)
    .attr("height", h);
svg.selectAll("rect")
    .data(ratings)
    .enter()
    .append("rect")
    (more attribs for ht, width, fill, etc.)
我可以显示企业id:

.append("title").text(function(d) {return "" + d.business_id ;});
但它只是一个由字符、数字、连字符和下划线组成的毫无意义的字符串

如何最有效地从Businesss数组中提取与该ID匹配的企业名称


我试过了

.append("title").text(function(d) {return getBizName(d.business_id); });
哪个叫

var getBizName = function(bizId) {
    var i;
    for (i=0; i<businesses.length; i++) {
        if (businesses[i].business_id==bizId) return businesses[i].name;
    }
};
var getBizName=函数(bizId){
var i;

对于(i=0;i因为我不知道
业务
评级
数组的结构,所以我不确定
getBizName
函数有什么问题,但通常情况下,该技术可以正常工作

请参见此处的示例(将鼠标悬停在条形图上显示企业名称):

如果
name
位于
businesss
数组中更深的某个位置,则您可能无法正确访问它

编辑:既然你说
企业
通常是一个大数据集,而
评级
要小得多,你可能需要使用
数组。映射
来更新
评级
以提前包含
名称
。这样,你就不必每次
评级
时都调用
getBizName
r在上空盘旋

业务
评级
中获取数据后,执行以下操作:

ratings.map(function(a) {
    a.business_name=getBizName(a.bid);
    return a;
  }
);
现在,
ratings
包括
business\u name
。在构造title元素时,只需使用
business\u name
,如下所示:

.append("title").text(function(d) { return d.business_name; });
更新小提琴这里:


您可能还想查看外观更好的工具提示。

昨天有人问:我不知道这将如何工作。我没有使用第二个文件,其中包含相同类型的数据。此外,用户不必单击任何内容来查看标题。很简单:您可以定制变量,类似于您定制数据文件的方式r您的图表更新函数。您需要更改事件触发器。我尝试完全删除事件,只执行updateChart(数据1);updateChart(数据2);但它不起作用我调整了代码,它仍然会产生奇怪的错误,我正试图弄清这些错误的根源,但为此我表示感谢。我的巨大数据集可以使用它,非常激动。非常感谢!
.append("title").text(function(d) { return d.business_name; });