访问存储在对象中的数组中存储的对象

时间:2015-04-09 17:28:49

标签: javascript

数据如下;

var graphs = {
    "links": [
        {"source": 1, "target": 2}, 
        {"source": 3, "target": 4}
    ]
}

将链接放入名为links的变量;

var links = graphs.links;

然后如何访问源和目标值? 提前谢谢。

给出了一些答案 - 我认为我的问题是依赖于上下文的。我尝试使用links [x] .source返回第x个链接的源代码,但是当我在特定点的代码中尝试它时,我得到一个返回的对象数组而不是值;

这是完整的代码片段;

d3.select("#filterResults")
    .on("click", function() {

        //d3.selectAll("circle").filter(function(d, i) {return i % 2 == 0})
        //  .attr("fill", "green")
        var nodeArray = []
        d3.selectAll("circle[fill=\"Red\"]")
            .each(function(d, i) {
                if (d3.select(this).attr("fill") == "Red") {
                    nodeArray.push(d3.select(this).attr("node-index"))
                }

            })

        nodeArray.forEach(function(srcNode, srcIdx, srcList) {
            alert(srcNode)
        })

        for (i=0; i < links.length; i++) {
        alert(links[i].source)

    })

目标是确定用户点击了哪些节点(并变为红色),然后最终我将仅创建这些节点的数据集,并更新我的数据选择以仅显示这些节点。这是d3力量背景下的一种过滤方法。

那么为什么不迭代链接在这里工作?我可以使用links.length,我得到正确数量的链接,所以我可以很好地引用数组。

4 个答案:

答案 0 :(得分:2)

links是数组。您可以通过links[0]links[1]等访问数组元素。这些单独的元素是对象,因此如果要访问对象的属性,可以执行links[0].target或{{1 }}

答案 1 :(得分:1)

graphs.links,或者就像你拥有的links一样,只是一个对象数组:

var firstSource = links[0].source;

// or
var i;
for (i = 0; i < links.length; ++i) {
    console.log("Source #" + i + ": " + links[i].source);
    console.log("Target #" + i + ": " + links[i].target);
}

答案 2 :(得分:0)

要访问源和目标,您可以使用 links[0].sourcelinks[0].target

答案 3 :(得分:0)

访问第一个链接的来源: var link1 = graphs.links[0].source;

访问第二个链接的目标: var link2 = graphs.links[1].target;