Drodzy przepełnienie stosu Wspólnoty,
Mam pytanie dotyczące wymiany własności obiektu (można przeskoczyć na dół, aby przeczytać pytanie). Pracuję nad aplikacją, która pobiera obiekt nauczyciela z Back-end. Back-end używa hibernacji java do zapytania bazy danych i serializuje obiekt, który ma być wysłany na front end (ja). Dostaję ten obiekt nauczyciela, ale w obiekcie znajdują się okrągłe odniesienia. Które java obsługuje, dodając identyfikator referencyjny zamiast obiektu. Dostaję obiekt nauczyciela, a wewnątrz obiektu znajdują się referencyjne identyfikatory, które muszę zastąpić rzeczywistym obiektem, a problem polega na tym, że są to obiekty zagnieżdżone. To, co obecnie robię, to tworzenie stosu i przemierzanie obiektów w celu znalezienia tych identyfikatorów i identyfikatorów. Kiedy znajdę identyfikator, umieszczę go na stosie. Nie jest to problemem, ale kiedy znajdę identyfikator referencyjny, muszę go odwiesić z tym, który znalazłem na stosie. Ponownie jest to trudne, ponieważ robię to za pomocą funkcji rekursywnej, więc nie mam fizycznego obiektu.JS - wymiana własności
Moje pytanie brzmi, w jaki sposób można zastąpić zagnieżdżonych właściwości obiektów
var stack = {};
var add = function(prop, data) {
if (prop == '@id') {
stack[data[prop]] = data;
}
if (prop == '@ref') {
// console.log(stack[data[prop]])
// How do i replace the value with the stack object
// test.PROPERTY = stack[data[prop]] is what im looking for
}
}
var traverse = function(object) {
for (var property in object) {
if (object.hasOwnProperty(property)) {
add(property, object);
if (object[property] && typeof object[property] === 'object') {
traverse(object[property]);
}
}
}
}
var test = {
'teacher': {
'course': {
"@id": "1",
'students': [{
"@id": "2",
'name': "John",
'course': {
"@ref": "1",
}
}, {
"@id": "2",
'name': "Next",
'course': {
"@ref": "1",
}
}]
}
}
};
setTimeout(() => {
console.log(stack);
// console.log(test);
}, 500);
traverse(test);
obok hałasu, co masz i co chcesz? proszę dodać dane przed i po zmianie. –
@NinaScholz Obecnie nie robię nic z danymi, ponieważ nie jestem pewien, w jaki sposób mogę odwołać się do danych obiektu z mojej funkcji. Ma sens ? – John
'@ ref' jest tam z jakiegoś powodu. jeśli spróbujesz zastąpić 'id's rzeczywistymi obiektami, możesz trafić w kołowe odwołania, które spowodują wycieki pamięci (które doprowadzą do maksymalnego błędu wielkości stosu wywołań). –