2016-05-04 12 views
-4

Ich habe ein JS Objekt von Lebensmitteln beträgtJavascript - Essen Summe Array Absturz

foodData: [ 
    { biscuits: 2, cola:2, sandwiches:0, cake:0 }, 
    { biscuits: 2, cola:2, sandwiches:0, cake:0 }, 
    { biscuits: 2, cola:0, sandwiches:0, cake:0 }, 
    {biscuits: 2, cola:0, sandwiches:0, cake:0 }, 
    {biscuits: 2, cola:0, sandwiches:0, cake:0 }, 
    {biscuits: 2, cola:0, sandwiches:4, cake:0 }, 
    {biscuits: 0, cola:0, sandwiches:0, cake:4 } 
], 

Was ich versuche, die Anzahl der Benutzer zu tun, löschen ist „Bad Lebensmittel“ pro Tag zugesagt. Letztendlich um gespeicherte Kalorien zu berechnen.

Die Artikel sollten aus dem ersten Index und dann in der Reihenfolge entfernt werden, wenn sie also 2 Bits Lebensmittel löschen müssen, wird es einen Keks wenn möglich entfernen, dann Cola, dann ein Sandwich und dann einen Kuchen.

Sie können 5 Bits von Lebensmitteln entfernen, so dass es iterieren kann, 1 von jedem Nahrungsmittel und dann wieder zu Keksen zu nehmen. Dies ist, was die Zählung tun sollte

Der Code unten funktioniert, aber bleibt beim Schleifen (alles über 3 Elemente) stecken. Ich vermute, es sind die if-Anweisungen oder möglicherweise die interne Zählung. Irgendein Vorschlag darin, wie dies aufhört, in einer konstanten Schleife steckenzubleiben. Ich denke, das Ausbrechen der if-Anweisung, wenn die Bedingung erfüllt ist, würde helfen.

+0

Warum wird Freitag zweimal verwendet? – cst1992

+0

Sorry Fehler - wurde entfernt. – LeBlaireau

+0

Ändern Sie den Code nicht. Es macht bestehende Antworten ungültig. – cst1992

Antwort

0

Es wäre gut gewesen, wenn Sie mehr Code oder mit sinnvollen Code zur Verfügung gestellt hätten (z. B. ich weiß nicht, was trinkeData ist). Ich habe Ihren Code innerhalb angenommen do-while-Schleife etwas wie folgt aussieht:

if (this.foodData[i]['biscuits'] > 0 && count < this.noRemovedFoods) { 
    this.foodData[i]['biscuits']--; 
    ++count; 
} 

if (this.foodData[i]['cola'] > 0 && count < this.noRemovedFoods) { 
    this.foodData[i]['cola']--; 
    ++count; 
} 

if (this.foodData[i]['sandwiches'] > 0 && count < this.noRemovedFoods) { 
    this.foodData[i]['sandwiches']--; 
    ++count; 
} 

if (this.foodData[i]['cake'] > 0 && count < this.noRemovedFoods) { 
    this.foodData[i]['cake']--; 
    ++count; 
} 

In diesem Fall, werden Sie in einer Endlosschleife stecken. Das Problem liegt in Ihrer Do-While-Schleife. Es gibt Fälle, in denen die Anzahl nicht erhöht wird, wenn alle foodData Items auf Null gehen und Sie in einer Endlosschleife hängen bleiben, weil die Bedingung count < this.noRemovedFoods nicht erfüllt ist.

Eine Sache, die Sie tun können, ist aus der Do-While-Schleife ausbrechen, wenn alle Lebensmittel-Bits auf Null geht. Wenn ich den Code betrachten, wie ich verstanden, über Code umschreiben zu brechen do-while-Schleife wie folgt aussehen:

do { 
    if (this.foodData[i]['biscuits'] > 0 && count < this.noRemovedFoods) { 
    this.foodData[i]['biscuits']--; 
    ++count; 
    } 

    if (this.foodData[i]['cola'] > 0 && count < this.noRemovedFoods) { 
    this.foodData[i]['cola']--; 
    ++count; 
    } 

    if (this.foodData[i]['sandwiches'] > 0 && count < this.noRemovedFoods) { 
    this.foodData[i]['sandwiches']--; 
    ++count; 
    } 

    if (this.foodData[i]['cake'] > 0 && count < this.noRemovedFoods) { 
    this.foodData[i]['cake']--; 
    ++count; 
    } 

    if(this.foodData[i]['biscuits'] == 0 && this.foodData[i]['cola'] == 0 && this.foodData[i]['sandwiches'] == 0 && this.foodData[i]['cake'] == 0) { 
    break; 
    } 
} 

einfach überprüfen, ob alle Lebensmittel Bit Null geworden ist aus der do-while-Schleife zu brechen.