Obsluga obiektow wielowymiarowych

Odpowiedz Nowy wątek
2018-11-26 13:43
0

Zalozmy ze mam sobie taki kod:

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:

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?

Pozostało 580 znaków

2018-11-26 13:44
2

Rekurencja.


Pozostało 580 znaków

2018-11-26 14:02
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?

Pozostało 580 znaków

2018-11-26 14:07
4

Rekurencja.


Pozostało 580 znaków

2018-11-26 15:11
0

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

Dzieki.

Jakie czary chciałbyś mieć do rekurencji? :-P - Patryk27 2018-11-26 15:11

Pozostało 580 znaków

2018-11-26 15:11

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.


Wiedza to potęga

Pozostało 580 znaków

2018-11-26 15:54
0

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

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

Wersja iteracyjna:

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)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0