2016-07-25 12 views
1

Ich bin zu dem Schluss gekommen, dass dies nahezu unmöglich ist. Im Bild unten versuche ich, das Objekt mit dem Schlüssel 36 zu entfernen, ohne den Schlüssel seines Elternteils () zu kennen. Picture of My Multidimensional JavaScript ObjectWie entferne ich ein untergeordnetes Objekt in einem mehrdimensionalen JavaScript-Objekt?

konnte ich das Objekt mit dem Schlüssel 36 mit der der folgenden Funktion finden (wobei o das Objekt und ID ist der Schlüssel), aber dann gibt es keine Art, wie es das Kind entfernen sehen Objekt aus dem Objekt.

Bevor ich nach einer anderen Lösung suchte, dachte ich, ich könnte auch die Experten der SO-Programmiergemeinschaft fragen.

[update] Die Lösung ist eigentlich ziemlich einfach (siehe Antwort unten). Ich erkannte nicht, dass o [p] in der ersten Ebene der Rekursion eine Referenz auf das tatsächliche Objekt war, was bedeutet, dass es aus dem tatsächlichen Objekt löscht.

Antwort

1

Wenn Sie es finden können, können Sie seine Eltern finden. Wenn Sie das übergeordnete Element finden, können Sie den gesuchten Schlüssel löschen. Sie können Ihre Funktion ändern, um genau dies zu tun. Es wird true auf Erfolg zurückgeben.

function deleteId(o, id) { 
    if(o.hasOwnProperty(id)) { 
     return delete o[id]; 
    } 
    var p; 
    for(p in o) { 
     if(o.hasOwnProperty(p) && typeof o[p] === 'object') { 
      var success = deleteId(o[p], id); 
      if(success) { 
       return true; 
      } 
     } 
    } 
    return false; 
} 
0

Anstatt das Objekt mit dieser ID zurückzugeben, sollten Sie das Objekt zurückgeben, das das Objekt enthält, das Sie zur Verfügung haben. Etwas wie:

0

Verwenden der replacer Parameter JSON.stringify:

JSON.parse(JSON.stringify(input, function(key, value) { 
    return key === '36' ? undefined : value; 
}));