2015-04-09 2 views
-2

Данные:Доступ к объектам, хранящимся в массивах, хранящихся в объектах

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

Вставка ссылок в переменную, называемую ссылками;

var links = graphs.links; 

Как получить доступ к исходным и целевым значениям? Спасибо заранее.

re некоторые из полученных ответов - я думаю, что моя проблема зависит от контекста. Я попробовал ссылки [x] .source, чтобы вернуть источник xth-ссылки, однако, когда я пытаюсь использовать его в своем коде в определенной точке, я получаю массив возвращаемых объектов, а не значений;

Это полный фрагмент кода;

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, и я получаю правильное количество ссылок, поэтому я могу просто ссылаться на массив.

+1

Используйте скобки обозначение 'ссылки [индекс] .source' или итерации через массив. Это довольно простой вопрос. – undefined

+0

Либо прямо, как 'graphs.links [0] .source', либо используя цикл. – Phylogenesis

+0

Привет, избиратели, вопрос конкретный и актуальный (и с примерами кода!) - что еще вы хотите? – pherris

ответ

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); 
} 
+0

Для полноты вы также можете выполнить итерацию с помощью метода Array.prototype.forEach() ': links.forEach (function (item, index) {...});'. – Phylogenesis

+0

Похоже, что 'forEach' - только IE9 + (в дополнение к реальным браузерам), поэтому я буду осторожно использовать его, если у вас есть вероятность появления пользователей в IE8. –

+0

См. Обновленный пост. – hwilson1

0

Чтобы получить доступ к источнику и цели, вы можете использовать links[0].source и links[0].target

+0

См. Обновленный пост – hwilson1

2

links является массивом. Вы можете получить доступ к элементам массива через links[0], links[1] и т. Д. Эти отдельные элементы являются объектами, поэтому, если вы хотите получить доступ к свойствам объектов, вы можете сделать links[0].target или links[0]['target'].

0

доступ источник первой ссылки: var link1 = graphs.links[0].source;

доступ мишень второго звена: var link2 = graphs.links[1].target;

+0

См. Обновленное сообщение. – hwilson1

Смежные вопросы