2016-09-15 3 views
0

Für jeden Tag gibt es keine Daten, ich möchte eine 0 in das Array hinzufügen: Der Code, den ich tat, ist falsch, weil es keine 0 für fehlende Tage hinzugefügt. Geht von 1, 2, 6 .. sollte 1, 2, 3, 4, 5, 6 gehen - und Nullen haben, die bis zu 6 führen. Die Ergebnisse sind unten.Füllen Sie eine Null für fehlende Tage

 var i = 1; 
     var found = false; 

     try { 
      for (var x = 0; x < @ViewBag.MonthDays; x++) { 
       i = 1; 
       do{ 
        found = false; 
        try { 
         if (i == cheque[x].theDay) { 
          s2.push(cheque[x].theMoney * -1); 
          found = true; 
          console.log("Day: " + cheque[x].theDay + " i " + i); 
          break 
         } 
        } 
        catch (error) { 
         s2.push(0); 
        } 
        console.log(i == cheque[x].theDay, i, cheque[x].theDay); 
        i++ 

       } while ((i < @ViewBag.MonthDays)) 
       console.log(found == false); 
       if (found == false) 
        s2.push(0); 
      } 
     } 
     catch (error){ 
      s2.push(0); 
     } 
     console.log ("Push: " + s2); 

Ergebnisse:

Day: 1 i 1 
false 
false 1 2 
Day: 2 i 2 
false 
false 1 6 
false 2 6 
false 3 6 
false 4 6 
false 5 6 
Day: 6 i 6 

Tag sagt: 6 i 6, wenn es passt.

Ich weiß, dass es einen besseren Weg, dies zu tun, ist ein Verfahren Art wie folgt aus:

items = items2.map(row => 
    //is there a matching row in items? 
    items.filter(r => r.theString == row.theString).length == 0 ? 
    //if not, fill with zeros 
      {theString:0, theCount:0} : 
    //if there is, return the items' row 
    items.filter(r => r.theString == row.theString)[0]); 

aber das entspricht nur zwei Arrays miteinander. Dieser braucht jeden Tag im Monat.

+0

Für was ist die innere While-Schleife? Sie erhöhen auch in der inneren Schleife, deshalb springt der Index von 2 bis 6. – Jasen

+0

@Jasen Die innere while Schleife sollte durch jeden Tag gehen ... –

+0

Sie zählen also Schecks für jeden Tag des Monats? Verzögern Sie Ihre Ausgabe bis nach den Schleifen. Schieben Sie diese in ein neues Array und drucken Sie das nach den Vergleichen. – Jasen

Antwort

-1

Dies ist, wie ich es jetzt getan haben:

  var monthD = new Array(@ViewBag.MonthDays) 
       .join().split(',') 
       .map(function(item, index){ return ++index;}) 
      console.log (monthD); 

      cheque = monthD.map(row => 
       //is there a matching row in items? 
       cheque.filter(r => r.theDay == row).length == 0 ? 
       //if not, fill with zeros 
       {theDay:0, theMoney:0} : 
       //if there is, return the items' row 
       cheque.filter(r => r.theDay == row)[0]); 

      try { 
       for (var x = 0; x < @ViewBag.MonthDays; x++) { 
        s2.push(cheque[x].theMoney * -1); 
       } 
      } 
      catch (error){ 
       s2.push(0); 
      } 

Viel besser und schnellere Methode. Ohne all die verwirrenden Schleifen, die mich durcheinander bringen.

Verwandte Themen