如何使用合并数组到d3可折叠树

时间:2016-03-01 21:47:56

标签: javascript jquery json d3.js merge

我正在处理许多小型JSON文件。任务是将它表示为d3可折叠库的合并大json文件。从互联网上的资源我发现了一种使用以下脚本合并数组的方法:

(function($){
  $.concat || $.extend({
    concat: function(b,c){
      var a=[];
      for(var x in arguments)
        if(typeof a == 'object') a = a.concat(arguments[x]);
      return a;
    }
  });
})(jQuery);

function foo() {
    $(function() {
        var a = $.getJSON("clinical.json");
        var b = $.getJSON("industry.json");
        $finalObj = $.concat(a, b);
    });
}

合并文件后,我尝试将结果设置到库中

 treeJSON = d3.json(foo(), function (error, treeData) { ...

但我收到以下错误:

1. GET http://localhost:63342/testMerg/undefined 404 (Not Found)
2. Uncaught TypeError: Cannot set property 'x0' of undefined

如果第二个的性质我清楚地理解,那导致d3没有构建树的必要资源,所以第一个我根本不理解。

我最终想要的是比较两个JSON文件,将它们合并到一个文件中并用d3渲染它。

我试图在互联网上找到一些用于合并和比较json文件的库,但不幸的是,这是不吉利的...有人可以给我一个建议吗?

1 个答案:

答案 0 :(得分:1)

$.getJSON()是异步的,$finalObj不会被设置为$.getJSON()返回的连接数组,而是连接的jQuery对象。

尝试使用$.when()等待两个$.getJSON()调用完成后再连接响应,.then()在异步进程后执行进程。

var res = [];

$.when($.getJSON(), $.getJSON())
.then(function(a, b) {
   res = $.concat(a[0], b[0]);
   return res
})
.then(function(data) {
  // do stuff with `data` : `res`
})