2013-03-08 2 views
5

Я пытаюсь использовать иерархию деревьев в D3 и застрял. Я думал, что я правильно строить JSON, но, когда я смотрел на предмет в инструмент разработчика, я вижу следующее:Длина массива в объекте не соответствует

chrome http://s10.postimage.org/yo3yshmax/chrome.png

Обратите внимание на первой строке отображается массив иждивенцы имеет 0 длину, но при расширении, вы может ясно видеть, что иждивенцы имеют 3 объекта. Когда я его строгую, я получаю следующее:

{"attributes":{"id":0,"name":"root"},"dependents":[]} 

Любая идея, что может быть неправильным? Благодаря!

+0

Ничего плохой. Они представляют вид объекта в разное время. Последнее, вероятно, является более поздним. Это мнение не влияет на ваш код. –

+0

... другими словами, вы, вероятно, строите его правильно. Просто не слишком полагайтесь на представления в инструментах разработчика. –

ответ

6

Эта проблема обычно возникает, когда вы меняете объект после его регистрации, поскольку Chrome не выполняет глубокую копию объекта при его регистрации, а просто сохраняет ссылку.

Дерево не сразу строится, а только при необходимости, а иногда оно основано на более позднем значении.

Если объект достаточно света, вы можете клонировать его самостоятельно, если вы действительно хотите, чтобы увидеть значение во время регистрации:

console.log(JSON.parse(JSON.stringify(myobject))); 

Если объект большой или рекурсивной, вы можете найти его немного больше трудно клонировать его. Лично у меня есть свой инструмент, JSON.prune.log.

В игнорировании оптимизации браузера поставляется с ценой, вы должны чаще просто учитывать это поведение и войти только примитивной, если вы хотите быть уверены в их значениях времени лесозаготовительного ...

+0

Я полагаю, что когда я вызываю функцию 'nodes', она получает объект до того, как произошли изменения, точно так же, как Chrome не получает самый современный объект. Как мне это решить? – PLui

+0

Я отредактировал с моим решением. –

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