对象数组javascript

时间:2013-10-25 14:39:04

标签: javascript json d3.js force-layout

下午好。

我加载了一个带有信息的json文件,以便在D3中创建一个可折叠的力布局。我可以访问数据,虽然我可以将值传递给var链接,它是一个对象数组,负责创建可视化。任何人都可以帮助将数据从json传递到var链接。剧本爆炸了。 我需要创建一个如下所示的var链接,其中source是= beforePos和target? afterPos和类型是字符串“medium”

var links = [{source: "beforePos", target: "afterPos", type: "medium"},];

注意:加载的json很大。

任何人都可以帮助我!

var links = [];
for (i = 0; i < jsonFile.generations.length; i++) {
    for (j = 0; j < jsonFile.generations[i].nodes.length; j++) {
        for (w = 0; w < jsonFile.generations[i].nodes[j].after.stid.length; w++) {
            afterPos = jsonFile.generations[i].nodes[j].after.stid[w];
            beforePos = jsonFile.generations[i].nodes[j].before.stid[w];
            var test = {
                source: beforePos,
                target: afterPos,
                type: "medium"
            };
            links.push(test);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

根据您的描述,最佳选择是通过缓存元素来加速处理。

var links = [];
JG = jsonFile.generations;
for (i = 0, endI = JG.length; i < endI ; i++) {
    JGIN = JG[i].nodes;
    for (j = 0, endJ = JGIN.length ; j < endJ ; j++) {
        JGINJ = JGIN[j];
        JGINJAS=JGINJ.after.stid;
        JGINJBS=JGINJ.before.stid;
        for (w = 0,  endW = JGINJAS.length; w < endW ; w++) {
            links.push({
                source: JGINJAS[w], target: JGINJBS[w], type:"medium"
            });
        }
    }
}

这减少了所需的时间,但是没有避免创建i * j * w对象的数组。

最佳选择应该是更改管理数组的代码,因此它使用回调来获取元素,并使用此回调以dinamically方式确定json层次结构中所需的元素。