2016-12-06 5 views
2

Ich habe ein Array von Objekten: -Wie wird ein Array von Objekten in Tabellendaten umgewandelt?

[{ 
    "TaAddClaim": { 
     "claim_id": "CL462573115516", 
     "date": "2016-11-08" 
    }, 
    "Employee": { 
     "full_name": "Admin User" 
    } 
}, { 
    "TaAddClaim": { 
     "claim_id": "CL67258688282", 
     "date": "2016-11-08" 
    }, 
    "Employee": { 
     "full_name": "Admin User" 
    } 
}, { 
    "TaPassAccount": { 
     "claim_id": "CL462573115516" 
    }, 
    "0": { 
     "total_expenses": "4436.00" 
    } 
}, { 
    "TaPassAccount": { 
     "claim_id": "CL67258688282" 
    }, 
    "0": { 
     "total_expenses": "3236.00" 
    } 
}] 

Ich möchte in einem HTML Tabelle werden diese Daten anzuzeigen. Meine Tabellenstruktur ist wie folgt:

$.each(resp, function(indx, obj) { 
    if (obj.TaAddClaim) { 
     table += '<tr>'; 
     table += '<td>' + obj.TaAddClaim.claim_id + '</td>'; 
     table += '<td>' + obj.TaAddClaim.date + '</td>'; 
     table += '<td>' + obj.Employee.full_name + '</td>'; 
    } 
}); 

Nun das Problem ist, ich bin nicht in der Lage, die total_expenses Daten in der Tabelle anzuzeigen.

Ich möchte die total_expenses Daten angezeigt werden, wenn die claim_id von TaAddClaim Übereinstimmung mit dem claim_id von TaPassAccount ist.

Vielen Dank im Voraus.

+0

Bitte versuchen Sie es thi: - var obj = jQuery.parseJSON ('{ "name": "John"}'); –

+1

Können Sie den JSON ändern? Die naheliegendste Lösung wäre, die Daten gruppiert zurückzugeben, so wie sie gruppiert werden sollten, und nicht als ein Array von Objekten, wo verschiedene Einträge verwandt sein könnten. – jeroen

+0

Sie müssen Ihr Array vor der Konvertierung in JSON manipulieren –

Antwort

1

Erstellen Sie eine „Karte“ von claim_id, bevor sie wieder über die Reaktion Iterieren zu schätzen, es zu machen:

var claimTotals = {}; 
$.each(resp, function(indx, obj) { 
    if (obj.TaPassAccount) { 
     claimTotals[obj.TaPassAccount.claim_id] = obj[0].total_expenses; 
    } 
}); 

Sie können dann auf claimTotals[obj.TaAddClaim.claim_id] beziehen den gewünschten Wert zu erhalten.

1

Sie benötigen eine andere jede Schleife innerhalb der ersten Schleife, hinzufügen zu können, finden "total_expences" für jeden "claim_id"

$.each(resp, function(indx, obj) { 
    if (obj.TaAddClaim) { 
     table += '<tr>'; 
     table += '<td>' + obj.TaAddClaim.claim_id + '</td>'; 
     table += '<td>' + obj.TaAddClaim.date + '</td>'; 
     table += '<td>' + obj.Employee.full_name + '</td>'; 
     $.each(resp, function(indx, obj2) { 
      if(obj2.TaPassAccount){ 
       if(obj2.TaPassAccount.claim_id == obj.TaAddClaim.claim_id){ 
        table += '<td>' + obj2['0'].total_expenses + '</td>'; 
       } 
      } 
     }); 
    } 
}); 

Runnable Beispiel: https://jsfiddle.net/yuxg19c8/2/

Nach Alnitak Kommentar, Um die Komplexität des Algorithmus zu verringern, können Sie dies auch tun. Zuerst sammeln Sie alle "Gesamtkosten". Und dann benutze sie einfach in deinem Tisch.

var claimTotalExpenses = {}; 
    $.each(resp, function(indx, obj) { 
      if(obj.TaPassAccount){ 
       claimTotalExpenses[obj.TaPassAccount.claim_id] = obj['0'].total_expenses; 
      } 
     }); 

    var table = '<table>'; 
    $.each(resp, function(indx, obj) { 
     if (obj.TaAddClaim) { 
      table += '<tr>'; 
      table += '<td>' + obj.TaAddClaim.claim_id + '</td>'; 
      table += '<td>' + obj.TaAddClaim.date + '</td>'; 
      table += '<td>' + obj.Employee.full_name + '</td>'; 
      if(claimTotalExpenses.hasOwnProperty(obj.TaAddClaim.claim_id)){ 
       table += '<td>' + claimTotalExpenses[obj.TaAddClaim.claim_id] + '</td>'; 
      } 
      table += '</tr>'; 
     } 
    }); 
    table += '</table>'; 

Runnable Beispiel: https://jsfiddle.net/477z59oa/

+0

danke mann seine arbeit .danke viel –

+0

Oh, das ist schrecklich - es verwandelt den Algorithmus in O (n^2) Komplexität statt linearer Zeit! – Alnitak

Verwandte Themen