JavaScript对象数组

3

下午好。

我正在使用D3创建一个可折叠的力导向图,需要加载一个包含信息的json文件。虽然我可以访问数据,但是我无法将值传递到变量links中,该变量是一个对象数组,负责创建可视化效果。有人能帮助我将json数据传递到变量links中吗?否则脚本会崩溃。 我需要创建一个类似下面的变量links,其中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);
        }
    }
}

3
“脚本崩溃”这个说法太过模糊。请详尽说明问题所在,包括堆栈跟踪信息。 - musical_coder
问题在于当我传递beforePos和afterPos时,我只能看到最后一个值而不是整个值。为了创建多个数组{对象},请参考以下代码:var test = { source: beforePos, target: afterPos, type: "medium" - user2920033
1个回答

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对象的数组。
最佳选项应该是更改管理数组的代码,使其使用回调来获取元素,并使用此回调动态确定所需的json层次结构中的元素。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接