2017-05-31 9 views
1

Ich habe ein Objekt und ich muss durch jede theCtns.services.depends_on gehen und jeden Wert dieser Eigenschaft testen. Wenn der Wert gleich meinem Zielwert ist, möchte ich ihn entfernen.Wie man durch jede Eigenschaft kommt und den Wert prüft?

var theCtns = { 
 
    "version": "2", 
 
    "networks": { 
 
    "default": { 
 
     "ipam": { 
 
     "config": [ 
 
      { 
 
      "subnet": "0.0.0.0/26", 
 
      "gateway": "0.0.0.0" 
 
      } 
 
     ] 
 
     } 
 
    } 
 
    }, 
 
    "services": { 
 
    "serviceOne": { 
 
     "image": "img1", 
 
     "container_name": "serviceOneName", 
 
     "volumes": [ 
 
     "x:x" 
 
     ], 
 
     "environment": [ 
 
     "SOMETHING=bla", 
 
     "SOMETHINGELSE=bli" 
 
     ], 
 
     "depends_on": [ 
 
     "serviceTwo", 
 
     "serviceX" 
 
     ] 
 
    }, 
 
    "serviceTwo": { 
 
     "image": "img2", 
 
     "container_name": "serviceTwoName", 
 
     "volumes": [ 
 
     "x:x" 
 
     ], 
 
     "environment": [ 
 
     "SOMETHING=bla", 
 
     "SOMETHINGELSE=bli" 
 
     ], 
 
     "depends_on": [ 
 
     "serviceX" 
 
     ] 
 
    } 
 
    } 
 
} 
 

 

 
for (var i= theCtns.services.length-1; i>=0; i--){ 
 
for (var j= theCtns.services[i].depends_on.length-1; j>=0; j--){ 
 
    if (theCtns.services[i].depends_on[j] === "serviceTwo") { 
 
     theCtns.services[i].depends_on.splice(j, 1); 
 
    } 
 
    } 
 
//theCtns.services[i].depends_on = theCtns.services[i].depends_on.filter(x=>x!=="serviceTwo") 
 
} 
 

 

 
console.log(theCtns)

in Wirklichkeit diese Aufgabe mehr als 8 Dienstleistungen haben aber 2 sind suffisent mein Problem

Also meine Schleife each service dann each depends_on und testen Sie den Wert in gehen lösen soll aber es sieht aus wie meine Schleife ist irgendwo falsch

[EDIT] korrigiert die lenght typo

+1

können Sie eine jsfiddle hinzufügen? – Abhidev

+0

@Abhidev Ich biete bereits ein Schnipsel, aber wenn Sie bevorzugen, kann ich eine Geige tun https://jsfiddle.net/ysjo9cm4/3/ aber nichts erscheint mit 'console.log' – Jerome

+0

@Rajesh ändert nichts – Jerome

Antwort

3

Das Problem ist theCtns.services ist ein Objekt, und Sie versuchen, eine inkrementelle Schleife zu verwenden, um es wie ein Array zu iterieren. Sie müssen stattdessen die Schlüssel des Objekts iterieren, indem Sie eine for...in Schleife verwenden.

var theCtns = { 
 
    "version": "2", 
 
    "networks": { 
 
    "default": { 
 
     "ipam": { 
 
     "config": [ 
 
      { 
 
      "subnet": "0.0.0.0/26", 
 
      "gateway": "0.0.0.0" 
 
      } 
 
     ] 
 
     } 
 
    } 
 
    }, 
 
    "services": { 
 
    "serviceOne": { 
 
     "image": "img1", 
 
     "container_name": "serviceOneName", 
 
     "volumes": [ 
 
     "x:x" 
 
     ], 
 
     "environment": [ 
 
     "SOMETHING=bla", 
 
     "SOMETHINGELSE=bli" 
 
     ], 
 
     "depends_on": [ 
 
     "serviceTwo", 
 
     "serviceX" 
 
     ] 
 
    }, 
 
    "serviceTwo": { 
 
     "image": "img2", 
 
     "container_name": "serviceTwoName", 
 
     "volumes": [ 
 
     "x:x" 
 
     ], 
 
     "environment": [ 
 
     "SOMETHING=bla", 
 
     "SOMETHINGELSE=bli" 
 
     ], 
 
     "depends_on": [ 
 
     "serviceX" 
 
     ] 
 
    } 
 
    } 
 
} 
 

 

 
for (var i in theCtns.services){ 
 
    if(theCtns.services.hasOwnProperty(i)){ 
 
     for (var j= theCtns.services[i].depends_on.length-1; j>=0; j--){ 
 
     if (theCtns.services[i].depends_on[j] === "serviceTwo") { 
 
      theCtns.services[i].depends_on.splice(j, 1); 
 
     } 
 
     } 
 
    } 
 
} 
 

 

 
console.log(theCtns)

+0

Wow beeindruckend, ok ich sehe meinen Fehler. Vielen Dank für die nette Eingabe – Jerome

1

theCtns.services ist kein Array und Sie versuchen, durch sie durchlaufen, als ob es war. Es ist eigentlich ein Object. Eine Object hat keine Länge, deshalb ist Ihre Schleife falsch gelaufen. Auch theCtns.services[i] war falsch, weil es sich auf Werte wie theCtns.services[0] bezieht, die nicht existieren. Ich habe Ihren Code geändert, so dass i seine Werte von den tatsächlichen Schlüsseln Ihres Objekts nimmt.

var theCtns = { 
 
    "version": "2", 
 
    "networks": { 
 
    "default": { 
 
     "ipam": { 
 
     "config": [ 
 
      { 
 
      "subnet": "0.0.0.0/26", 
 
      "gateway": "0.0.0.0" 
 
      } 
 
     ] 
 
     } 
 
    } 
 
    }, 
 
    "services": { 
 
    "serviceOne": { 
 
     "image": "img1", 
 
     "container_name": "serviceOneName", 
 
     "volumes": [ 
 
     "x:x" 
 
     ], 
 
     "environment": [ 
 
     "SOMETHING=bla", 
 
     "SOMETHINGELSE=bli" 
 
     ], 
 
     "depends_on": [ 
 
     "serviceTwo", 
 
     "serviceX" 
 
     ] 
 
    }, 
 
    "serviceTwo": { 
 
     "image": "img2", 
 
     "container_name": "serviceTwoName", 
 
     "volumes": [ 
 
     "x:x" 
 
     ], 
 
     "environment": [ 
 
     "SOMETHING=bla", 
 
     "SOMETHINGELSE=bli" 
 
     ], 
 
     "depends_on": [ 
 
     "serviceX" 
 
     ] 
 
    } 
 
    } 
 
} 
 

 

 
for (var i in theCtns.services){ 
 
    console.log(i); 
 
    for (var j= theCtns.services[i].depends_on.length-1; j>=0; j--){ 
 
    if (theCtns.services[i].depends_on[j] === "serviceTwo") { 
 
     theCtns.services[i].depends_on.splice(j, 1); 
 
    } 
 
    } 
 
} 
 

 

 
console.log(theCtns)

+1

Es ist das gleiche wie @MrCode, aber danke auch für die Eingabe und um mir meinen Fehler – Jerome

1

den geänderten Code überprüfen, da es kein Array ist, sondern ein Objekt, müssen Sie für ... var verwenden. Sie können auch direkt Array-Methoden verwenden, um den Zielwert im Feld "depends_on" zu finden.

var theCtns = { 
     "version": "2", 
     "networks": { 
     "default": { 
      "ipam": { 
      "config": [ 
       { 
       "subnet": "0.0.0.0/26", 
       "gateway": "0.0.0.0" 
       } 
      ] 
      } 
     } 
     }, 
     "services": { 
     "serviceOne": { 
      "image": "img1", 
      "container_name": "serviceOneName", 
      "volumes": [ 
      "x:x" 
      ], 
      "environment": [ 
      "SOMETHING=bla", 
      "SOMETHINGELSE=bli" 
      ], 
      "depends_on": [ 
      "serviceTwo", 
      "serviceX" 
      ] 
     }, 
     "serviceTwo": { 
      "image": "img2", 
      "container_name": "serviceTwoName", 
      "volumes": [ 
      "x:x" 
      ], 
      "environment": [ 
      "SOMETHING=bla", 
      "SOMETHINGELSE=bli" 
      ], 
      "depends_on": [ 
      "serviceX" 
      ] 
     } 
     } 
    } 

    for (var idx in theCtns.services) { 
     var deps_idx = 
     theCtns.services[idx].depends_on.indexOf('serviceTwo'); 
     if (deps_idx) { 
      theCtns.services[idx].depends_on.splice(idx, 1); 
     } 
    } 
    console.log(theCtns.services); 
+0

Ich habe die Lösung von @MrCode aber danke, dass Sie sich die Zeit nehmen, um mein Problem zu lösen – Jerome

Verwandte Themen