zugegriffen Ich habe ein beliebig tiefes Objekt wie folgt:welche Objekteigenschaften eine Funktion
const objToAccess = {
id: 1,
name: {
first: 'Foo',
last: 'Bar'
},
address: {
street: {
name: '987 Walker',
roadType: 'Ave'
},
zip: '12345'
}
};
Ich nenne eine Funktion, die die oben objToAccess
als param nimmt. EDIT: Diese Funktion ist eine Blackbox. Ich weiß nicht, wie es aussieht und kann es nicht bearbeiten. Zum Beispiel:
const accessFn = objToAccess => {
const a = objToAccess.id;
const b = objToAccess.name.first;
const c = objToAccess.address;
};
Nachdem diese Funktion aufgerufen wird, möchte ich wissen, auf welche Eigenschaften zugegriffen wurde. Hier ist der Kicker: Wenn auf ein verschachteltes Objekt zugegriffen wurde, möchte ich auch alle untergeordneten Objekte als zugegriffen markieren. Zum Beispiel, nach dem obigen Code ausgeführt wird, würde ich ein Ergebnis mag das wie folgt aussieht:
const propsAccessed = {
id: true,
name: {
first: true,
last: false
},
address: {
street: {
name: true,
roadType: true
},
zip: true
}
};
Mein naiver Versuch ist erstellt das propsAccessed
Objekt & setzte alles falsch, und dann verwenden Getter (unten). Aber ich kann nicht herausfinden, wie man sie so verwendet, dass alle Kinder markiert werden, wenn nur auf das Elternobjekt zugegriffen wird. Irgendwelche Ideen wären großartig!
const gettedReturnedMutation = {
get id() {
propsAccessed.id = true;
},
get name() {
// TODO if just address is accessed, recursively flag all children as true
return {
get first() {
propsAccessed.name.first = true;
},
get last() {
propsAccessed.name.last = true;
}
}
},
get address() {
// TODO if just address is accessed, recursively flag all children as true
return {
get street() {
return {
get name() {
propsAccessed.address.street.name = true;
},
get roadType() {
propsAccessed.address.street.roadType = true;
}
}
},
get zip() {
propsAccessed.address.zip = true;
}
}
}
}
Was ist der Anwendungsfall? Liest ein bisschen wie ein XY-Problem ... – elclanrs
Letztendlich möchte ich 'falsche' Objekte aus dem Objekt entfernen. Realistisch gesehen ist das Objekt ein AST. –
Sie könnten mit Ihrer eigenen Funktion 'access (obj, 'path')' zugreifen und vielleicht den Pfad löschen, der die Kinder los wird. Nicht sicher, warum Sie Kinder kennzeichnen müssen, wenn der Elternteil markiert ist und sowieso entfernt werden muss – elclanrs