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