2016-04-04 5 views
0

Ich habe eine Tabelle, in der drei Spalten sind, d. H. Event ID, Event und Counts. Es kann mehrere Zeilen mit der gleichen Ereignis-ID geben, die ihre eigenen Zählwerte unter der Spalte "Anzahl" haben. Ich muss die eindeutige Ereignis-ID herausfinden und dann ihre entsprechenden Zählwerte addieren und die Ausgabetabelle mit eindeutiger Ereignis-ID, Ereignis und Zählung anzeigen, wobei der Zählwert die Summe der verfügbaren Zählungen sein wird. Ich habe versucht, tabellarische Form zu zeigen, was ich wie folgt zu tun:Wie man die Zählwerte ähnlicher Ereignis-ID mit Javascript hinzufügen?

+--------+--------------+----------+ 
|   Ashley Janes   | 
+--------+--------------+----------+ 
|Eventid | Event  | Count | 
+--------+--------------+----------+ 
| 5  | Wash apple | 10 | 
| 2  | cook potatoes| 20 | 
| 8  | cut chillies |  5 | 
+--------+--------------+----------+ 
|   Taylor Perry    | 
+--------+---------------+---------+ 
| 2  | cook potatoes | 30  |  
| 5  | Wash apple | 40  | 
| 8  | cut chillies | 60  | 

Now I have to add count values of corresponding event id and display it in a result table as following:: 

+--------+--------------+----------+ 
|Eventid | Event  | Count | 
+--------+--------------+----------+ 
| 5  | Wash apple | 50 | 
| 2  | cook potatoes| 50 | 
| 8  | cut chillies | 65 | 
+--------+--------------+----------+ 

bisher habe ich getan folgende:

Response.Write "<div><table><tr>" 
Response.Write"<td class='tdcell1'>Event ID</td><td class='tdcell1'>Count</td></tr>" 
Response.Write"<tr><td align=center width= '15%'></td><td><div class= 'resultSum'></div></td></tr>" 
Response.Write"</table><div>" 

<script> 
$(function() { 
     GetEventIds('#displaytable') 
    }); 
function GetEventIds(tableIdWithHash) { 
    var eventIds = []; 
    var eventSum = Number(0); 
     var count = Number(0); 

    $(tableIdWithHash).find('.Idevent').each(function(i){ 
    var eId = $(this).html(); 
    if (eventIds.indexOf(eId) === -1) 
     eventIds.push($(this).html()); 

     if (eId = eventIds) 
      count++; 
       eventSum += Number($(this).html()); 
      $(".resultSum").html(eventSum); 
    }); 
    alert('EventIds: ' + JSON.stringify(eventIds)); 
    return eventIds; 
}   
</script> 
    Code for the table need to be parsed. 
<table id= 'displaytable' width='35%' border=1 style= 'margin-bottom:35px; margin-top:35px;'> 
    <tr> 
     <td class='tdcell1'>Event ID</td> 
     <td class='tdcell1'>Event</td> 
     <td class='tdcell1'>Count</td> 
    </tr> 
    <tr style='font-size:13px;'> 
     <td align='right' class='tdcell1' colspan='3'>Ashley Janes</td> 
    </tr> 
    <tr style='font-size:13px;'> 
     <td align=center class='Idevent' width= '15%'> 5 </td> 
     <td align=center class='eventNames' width= '35%'> Wash Apple </td> 
     <td class='eventCounts' align=center width= '15%'>11</td> 
    </tr> 
    <tr style='font-size:13px;'> 
     <td align=center class='Idevent' width= '15%'> 2 </td> 
     <td align=center class='eventNames' width= '35%'> Cook Potatoes </td> 
     <td class='eventCounts' align=center width= '15%'>20</td> 
    </tr> 
    <tr style='font-size:13px;'> 
     <td align='right' class='tdcell1' colspan='3'>Taylor Perry</td> 
    </tr> 
    <tr style='font-size:13px;'> 
     <td align=center class='Idevent' width= '15%'> 2 </td> 
     <td align=center class='eventNames' width= '35%'> Cook Potatoes </td> 
     <td class='eventCounts' align=center width= '15%'>20</td> 
    </tr> 
    <tr style='font-size:13px;'> 
     <td align=center class='Idevent' width= '15%'> 5 </td> 
     <td align=center class='eventNames' width= '35%'> Wash Apple </td> 
     <td class='eventCounts' align=center width= '15%'>106</td> 
    </tr> 
</table> 

Mein Code mir die Ausgabe für die Summe der Ereignis-ID gibt nicht die zählt. Wie mache ich das mit JavaScript? Bitte helfen Sie.

+0

1.. Bitte posten Sie ein Beispiel für das zu analysierende Tabellen-Markup. 2. Was enthält der '# resultSum'-Knoten (logisch) und sind Sie sicher, dass nur ein Knoten mit dieser ID im gesamten Dokument vorhanden ist? – Thomas

+0

@Thomas: Eigentlich ist die Tabelle, die ich analysieren muss, das Ergebnis einer anderen Tabelle. Ich dachte, es könnte kompliziert sein, wenn ich es behalte. Also habe ich nur ein einfaches Beispiel einer Tabelle wie oben gezeigt gegeben. Zweitens ist #resultSum nur ein div, das ich in einer Tabellenzelle td erstellt habe, es hat nichts, aber das Ergebnis der Addition von Zählungen wird schließlich dorthin gehen und ja, es gibt keine andere ID mit #resultSum. – VicStat

+0

Ich habe das Tabellen-Markup hinzugefügt, das analysiert werden musste. – VicStat

Antwort

1

Schauen Sie sich diesen Code an und ob er so funktioniert, wie Sie es erwarten.

$(function() { 
    GetEventIds('#displaytable') 
}); 

//this is a bad function, because it does way more than it says. 
function GetEventIds(tableIdWithHash) { 

    //a little helper 
    //convert a value to int32. any non-numeric value -> 0 
    //only the low 32-bits are kept, if the value exceeds the range 
    //and removes all bits after the dot (2.9 -> 2 and -2.9 -> -2) 
    function int(v){ return v|0; } 

    var eventSum = 0; 
    var events = {}; 

    $(tableIdWithHash).find('.Idevent').each(function(i){ 
     var $this = $(this); 

     var eId = $this.text().trim(); 

     //finding the .eventCount-node of this row 
     var count = int($this.siblings('.eventCounts').text().trim()); 

     events[eId] = int(events[eId]) + count; 

     //still don't get what #resultSum should contain (logically) 
     //the total amount of events, independent of the event-id? 
     eventSum += count; 
    }); 
    $("#resultSum").html(eventSum); 

    var eventIds = Object.keys(events); 
    console.log('EventIds: ', eventIds); 
    console.log('Event counts by Id: ', JSON.stringify(events)); 

    return eventIds; 
}   

müssen noch einige Informationen über den Zweck/Sinn des #resultSum. Ich habe nur eine Vermutung darüber gemacht; habe ich recht?

Und wie ich die Funktion kommentiert, Was ist der Zweck dieser Funktion? Es tut mehr als es sagt. Dies kann zu Verwirrung führen. Vielleicht möchten Sie dies in mehrere Funktionen aufteilen oder umbenennen und den Rückgabewert löschen.

Oder möchten Sie vielleicht die Tabelle in eine Datenstruktur analysieren und damit arbeiten? Aber dann ist es vielleicht weiser, JSON aus dem Backend zu entfernen, als etwas Markup zu analysieren.