Цикл для глубокого вложенного массива - PullRequest
0 голосов
/ 16 августа 2010

Я здесь, чтобы задать вопрос о вложенном массиве.У меня есть файл, скажем, «content.json», в котором есть переменные javascript и json в качестве их значений, в json есть объекты как значения и объекты как значения каждого объекта.Я имею в виду, что есть глубокая цепочка, которую нужно преодолеть, чтобы достичь окончательного значения, и еще не решено, сколько элементов в корне и сколько элементов на любом этапе.

Какой тип циклов я должен рассмотреть, чтобы показатьрезультаты в каком-то формате, как это делает block?

Я избегаю рекурсии из-за проблем с памятью, поэтому следует реализовать цикл.

Спасибо

1 Ответ

1 голос
/ 16 августа 2010

Избегать рекурсии из-за проблем с памятью, по сути, ошибка. Рассмотрим глубоко вложенный объект, такой как

var obj = {{{{{{{{{thing: 0}}}}}}}}}

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

getThing(obj)
if obj == nul return
if obj.thing is defined you're at the bottom
// otherwise
getThing(obj[0])

для каждой рекурсии вся используемая память представляет собой кадр стека: адрес возврата и указатель, в основном. При этом около 18 слов памяти.

То, что вы делаете, по сути, дерево; вам нужно всего лишь lg глубина памяти для рекурсивного исследования глубины дерева; если хотите, lg количество предметов / 2 дополнительной памяти. (Pop викторина: почему это правда?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...