Mam tablicę obiektów, które mogą zawierać dzieci tego samego typu obiektu, na przykład:Praca z tablicą obiektów
var exampleArray = [
{
alias: 'alias1',
children: [
{
alias: 'child1'
},
{
alias: 'child2',
children: [
{
alias: 'child4'
},
{
alias: 'child5'
}
]
},
{
alias: 'child3'
}
]
},
{
alias: 'alias2'
},
{
alias: 'alias3',
children: [
{
alias: 'child6'
},
{
alias: 'child7'
}
]
}
];
Przedmiotem baza ma inne właściwości, ale nie są one ważne na pytanie (s) na dłoni. Teraz, pozwala zakładać, że obiekty mogą być:
{
alias: 'string',
children: []
}
Dzieci są opcjonalne.
Poszukuję najlepszych metod/najszybszych metod zarządzania niektórymi przedmiotami za pomocą takiego obiektu. Stworzyłem kilka cyklicznych metod, aby zrobić kilka rzeczy, które chcę, ale chcę wiedzieć, czy istnieją lepsze sposoby, aby zabrać następujące zadania:
- hasAlias (ARR, alias) - muszę ustalić jeśli cały obiekt zawiera dowolny obiekt z podanym aliasem.
Obecnie robię to rekursywnie, ale biorąc pod uwagę, że ta tablica może się rozwijać w sposób skończony, metoda rekursywna ostatecznie osiągnie granice stosu.
getParent (arr, alias) - Muszę mieć możliwość uzyskania elementu nadrzędnego zawierającego element o podanym aliasie. Biorąc pod uwagę, że alias "są unikalne dla całej tablicy, nigdy nie będzie dwóch takich samych aliasów. Znowu robię to rekurencyjnie teraz, ale chcę znaleźć lepsze metody robienia tego.
deleteObject (arr, alias) - Nie jestem pewien, jak to zrobić obecnie. Muszę umieć przekazać tablicę i alias i usunąć ten obiekt (i wszystkie jego dzieci) z podanej tablicy. Rozpocząłem rekursywną metodę robienia tego, ale zatrzymałem się i postanowiłem zamiast tego opublikować tutaj.
Używam Node.js i mam do dyspozycji szybkie metody robienia rzeczy. Wciąż jestem całkiem nowym użytkownikiem JavaScript, więc nie jestem pewien, czy istnieją lepsze sposoby na robienie rzeczy z tablicami o większej skali, jak ta.
I myślę, że możesz podzielić całą tablicę na dwie lub trzy i osobno wywołać swoją obecną metodę. W ten sposób możesz przejść przez specyfikację. Będziesz miał dobrą poprawę. –
Nie jestem pewien, czy zrobiłbym to w ten sposób, ale jako sidenote 'hasAlias' * można * zrobić z czymś takim jak' JSON.stringify (arr) .indexOf ('alias') 'jeśli słowo' alias' nie pojawiają się nigdzie indziej itd. – adeneo
Myślę, że rekursywne ma sens, jest mało prawdopodobne, abyś osiągnął limit stosu, chyba że masz tysiące zagnieżdżonych dzieci. Zawsze możesz spróbować zrobić z niego rekurencję i trampolinę, lub uruchomić transpilator, aby przekształcić go w pętlę. – elclanrs