2017-01-23 7 views
0

In JavaScript baue ich ein Objekt. Innerhalb einer Schleife muss ich prüfen, ob das Wurzelobjekt bereits ein Kindobjekt enthält, und wenn nicht, muss ich es hinzufügen.Überprüfen, ob ein untergeordnetes Objekt im JavaScript-Objekt existiert

childObjectName = this.name.split('.')[1]; 

Nun, wie kann ich überprüfen, ob mein Root-Objekt zu sehen, myObject bereits ein Kind mit Namen enthält, was auch immer in childObjectName enthalten ist?

EDIT:

Ich denke, vielleicht mein OP nicht ganz klar war. Das tut mir leid.

Nehmen wir an, childObjectName endet mit einem Wert von "ThisName". Jetzt möchte ich überprüfen und sehen, ob myObject bereits ein untergeordnetes Objekt namens "ThisName" enthält. Und da dies in einer Schleife ist, muss ich in der Lage sein, nach JEDEM Namen zu suchen.

Ich hoffe, dass das mehr Sinn macht?

EDIT 2:

{ 
    "myObject":{ 
     "CampaignType":{ 
     "Exclusive":25, 
     "Shared":6 
     } 
    } 
} 

Ok, nun, sagen wir, die var childObjectName auf "Kampagnentyp" gleich ist. In diesem Fall muss ich beim Looting TRUE erhalten, um zu sehen, ob myObjectchildObjectName enthält.

Aber sagen wir mal childObjectName ist gleich "FooBar". In diesem Fall müsste ich FALSE bekommen.

+0

Wenn ein Kind Sie Eigenschaft bedeuten, dann ' childObjectName in rootObject'. Oder um genauer zu sein: if (rootObject [childObjectName] === dies) '. –

+1

Die Art, wie Sie Ihre Objekte beschreiben, ist ein bisschen verwirrend. Können Sie ein Beispiel-JSON-Objekt bereitstellen, um die Struktur anzuzeigen, auf die Sie sich beziehen? –

+0

sicher. Eine Sekunde ... –

Antwort

2

So etwas wie das. Wenn eine Eigenschaft in dem Objekt nicht existiert, gibt sie undefined zurück. Sie müssen also grundsätzlich prüfen, ob die Eigenschaft für das Objekt existiert oder nicht.

if(! myObject[childObjectName]) 
{ 
    myObject.childObjectName = this.name.split('.')[1]; 
} 
+0

Wäre das nicht in myObject nach einem Child-Objekt namens "childObjectName" anstatt nach einem Child-Objekt mit dem Namen "childObjectName" zu suchen? –

+0

Sie können den Punktaccessor nicht mit einer Variablen verwenden. Verwenden Sie Klammern. –

+0

Sie können den Punkt-Accessor mit einem Eigenschaftsnamen verwenden, – Agalo

0
childObjectName = childObjectName || this.name.split('.')[1]; 

Wenn die Eigenschaft vorhanden ist (und sein Wert ist truthy) seinen Wert ändert sich nicht, sonst wird es ein Wert gegeben werden. Dies kann auf Eigenschaften von root angewendet werden.

Beachten Sie, dass dies möglicherweise nicht funktioniert, wenn die Eigenschaft vorhanden ist und ein falscher Wert vorliegt.

Update für edit: Wenn Sie für eine beliebige Eigenschaft dazu brauchen und Ihr Code läuft auf Root-Ebene, dann verwenden diese root zu verweisen:

Object.getOwnPropertyNames(this); // Now you have an array of properties set on root. 
+0

sehen Sie die Bearbeitung zu meinem OP. Vielen Dank! –

1

Sie sollten verwenden hasOwnProperty. Es ist kompatibel mit allen Browsern, und es funktioniert auch, wenn die Eigenschaft einen falsy Wert hat, wie null, false usw.

var myObject = { 
 
    propOne: "hello world", 
 
    propTwo: false, 
 
    CampaignType: { 
 
    "Exclusive": 25, 
 
    "Shared": 6 
 
    } 
 
}; 
 

 
checkForPropertyName("prop" + "One"); 
 
checkForPropertyName("propTwo"); 
 
checkForPropertyName("propThree"); 
 
checkForPropertyName("CampaignType"); 
 

 
function checkForPropertyName(childObjectName) { 
 
    if (myObject.hasOwnProperty(childObjectName)) { 
 
    console.log('myObject has property "' + childObjectName + '"'); 
 
    } else { 
 
    console.log('myObject does NOT have property "' + childObjectName + '"'); 
 
    } 
 
}

+0

dies jetzt testen! –

0
var childObjectName = this.name.split('.')[1]; 
if(myobject[childobjectName]){ 
    //the child object is present 
}else{ 
//the child object is not present 
} 
+0

Dies fügt den Antworten hier schon absolut keinen Wert hinzu. –

+0

warum denkst du das @jared? –

+0

Anders als mit dem richtigen Zugriffsoperator (ein Fehler, auf den ich bereits in einem Kommentar hingewiesen habe), wie unterscheidet sich das von Agalos Antwort? –

Verwandte Themen