Ich habe derzeit mit einem JavaScript-Problem zu kämpfen. Ich möchte eine mehrstufige Eigenschaft sowie alle darin enthaltenen Variablen zurückgeben, indem ich das ursprüngliche Objekt und ein Array von Pfaden an die gewünschten Eigenschaften übergebe.Zugriff auf Multi-Level-Eigenschaft und den vollständigen Pfad der Eigenschaften
Zum Beispiel, wenn ich folgendes Objekt:
obj = {
product: {
candidate: {
id: 10,
reference: "test",
count: 4,
steps: 10
}
}
}
Ich möchte eine Methode aufrufen können:
getVarPath(obj, ["product.candidate.ID", "product.candidate.reference"])
Und es dann mit jeder Variablen ein Objekt zurückgeben bestanden haben, in das Array, in seiner ursprünglichen Struktur. So wäre dies ein Objekt zurückgeben, wie so sucht:
{
product: {
candidate: {
id: 10,
reference: "test"
}
}
}
habe ich diese Arbeit in meiner lokalen Lösung im Moment (in einem String übergeben, anstatt ein Array im Moment).
Die Lösung im Moment ist ziemlich schrecklich, aber ich freue mich darauf, es zu verbessern, wenn also jemand eine bessere Methode vorstellen könnte, die großartig wäre. Noch einmal, das ist jetzt ziemlich schrecklich, aber ich möchte es verbessern. Aber es macht den Job:
var getVarPath = function(obj, keys){
var elements = keys.split("."),
evalStr = "",
objStr = "obj",
newObjStr = "newObj",
newObj = {};
if(elements.length > 1){
elements.forEach(function(key, index){
// first append a property accessor at the end of the eval string
evalStr = evalStr + "['" + key + "']";
// if we're at the last element, we've reached the value, so assign it
if(index === elements.length -1){
eval(newObjStr + evalStr + " = " + objStr + evalStr);
}
else {
// if we're not at the last, we're at an object level
// if the nested object doesn't exist yet, create it
if(!eval(newObjStr + evalStr)){
eval(newObjStr + evalStr + " = {};");
}
}
});
}
return newObj;
}
Was Sie versucht haben, bisher? –
Ich habe die Frage mit meiner aktuellen Arbeitslösung bearbeitet, aber ich mag die Tatsache nicht, dass ich Eval benutze, um es ein bisschen schöner zu machen – TomDavies