2016-12-06 159 views
2

我有对象的数组: -如何将对象数组转换为表格数据?

[{ 
    "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" 
    } 
}] 

我想在HTML表中显示这些数据。我的表结构如下:

$.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>'; 
    } 
}); 

现在的问题是,我无法在表格中显示的数据total_expenses

如果claim_idTaAddClaimTaPassAccountclaim_id匹配,我想要显示total_expenses的数据。

在此先感谢。

+0

请尝试THI: - VAR OBJ = jQuery.parseJSON( '{ “名”: “约翰”}'); –

+1

你可以修改json吗?最明显的解决方案是返回分组的数据,因为它应该被分组,而不是作为不同条目可能相关的对象数组。 – jeroen

+0

您需要在将数组转换为json之前对其进行操作 –

回答

1

建立一个从claim_id“地图”在响应迭代再次以使其前值:

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

然后,您可以参考claimTotals[obj.TaAddClaim.claim_id]以获得所需的值。

1

您需要添加第一循环内其他每个循环,才能够找到“total_expences”为每个“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的例子: https://jsfiddle.net/yuxg19c8/2/

根据参宿一评论,为了降低算法的复杂性,你也可以这样做。首先,你正在收集所有“total_expenses”。然后在你的桌子上使用它们。

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的例子:https://jsfiddle.net/477z59oa/

+0

感谢他的工作。感谢很多 –

+0

哦,这太可怕了 - 它将算法变成O(n^2)复杂性而不是线性时间! – Alnitak

相关问题