Obsluga obiektow wielowymiarowych

Obsluga obiektow wielowymiarowych
goku21
  • Rejestracja:ponad 7 lat
  • Ostatnio:6 miesięcy
  • Postów:91
0

Zalozmy ze mam sobie taki kod:

Kopiuj
let obj = {}
obj.poss ={a:{}, b:{}}
obj.poss[a].poss = {c:{}, d:{}}
obj.poss[b].poss - {e:{}, f:{}}


teraz zeby sie do wszystkiego odwolac musze napisac:

Kopiuj
for(let key of Object.keys(obj.poss)
{
  for(let key2 of Object.keys(obj.poss[key].poss)
  {
    
  }
}

I tak dalej im wiecej mozliwosci tym wiecej musze napisac petli. Jest jakis inny sposob zeby obsluzyc wszystkie zagniezdzone obiekty w obiektach bardziej abstrakcyjnie bez pisania kolejnych petli? Co jesli np. nie wiem ile jest zagniezdzen w zagniezdzeniach?

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
2

Rekurencja.


goku21
  • Rejestracja:ponad 7 lat
  • Ostatnio:6 miesięcy
  • Postów:91
0

A jezeli nie mam juz zbudowanego obiektu tylko dopiero go buduje i powiedzmy ze chce zeby obiekt "a" mial 2 nowe obiekty "b" i "c" a te 2 obiekty mialy kolejne 3 i tak powiedzmy do glebokosci 5?

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
4

Rekurencja.


goku21
  • Rejestracja:ponad 7 lat
  • Ostatnio:6 miesięcy
  • Postów:91
0

Kumam, dziala.
Nigdy tego nie lubilem btw:> myslalem ze w es6 sa na to jakies czary z ... czy cus.

Dzieki.

Patryk27
Jakie czary chciałbyś mieć do rekurencji? :-P
Haskell
  • Rejestracja:prawie 10 lat
  • Ostatnio:12 miesięcy
  • Postów:4700
2

Taka struktura nazywa się drzewem (tree), jest to szczególny przypadek grafu (graph). Można to zrobić iteracyjnie, można rekurencyjnie. W sieci są opisane różne algorytmy dotyczące drzew i grafów. Szukaj pod hasłem np. "javascript loop tree" albo coś podobnego.


Zaglądali do kufrów, zaglądali do waliz, nie zajrzeli do d**y - tam miałem socjalizm. Czesław Miłosz
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:2 minuty
  • Postów:4928
0

Rekurencję można zamienić na iterację za pomocą stosu, dokładnie stosu LIFO . Na przykład, przeszukiwanie preorder, wersja rekurencyjna, pseudokod:

Kopiuj
fun traverse_recursive(obj):
	if obj:
		visit(obj)
		traverse_recursive(obj.left)
		traverse_recursive(obj.right)

Wersja iteracyjna:

Kopiuj
fun traverse_iterative(obj):
	push(obj)
	while ! stack_is_empty():
		obj = pop()
		visit(obj)
		if obj.left: push(obj.left)
		if obj.right: push(obj.right)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.