数据如下;
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,我得到正确数量的链接,所以我可以很好地引用数组。
答案 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].source
和links[0].target
答案 3 :(得分:0)
访问第一个链接的来源:
var link1 = graphs.links[0].source;
访问第二个链接的目标:
var link2 = graphs.links[1].target;